sh 和 bash 都是 Unix 和 Linux 系統中的命令列介面,但它們有一些重要的差異:
歷史和來源:
sh 是 Bourne shell,最早由 Stephen Bourne 在 1970 年代開發,是早期的 Unix 系統預設 shell。
bash 是 Bourne Again Shell,由 Brian Fox 於 1989 年開發,旨在取代 Bourne shell 並向後兼容。它加入了許多改進的功能和擴展。
功能和擴展:
bash 提供了比 sh 更多的功能,包括:
- 支援命令補全(Tab 鍵)
- 更加靈活的變數和字符串處理
- 更強大的控制結構(例如
[[ ... ]] 测试结构)
- 數組和多維數組
- 更加先進的歷史記錄功能
相容性:
bash 通常兼容 sh 的腳本,但 sh 不一定能執行 bash 的所有特性。這意味著在寫腳本時,如果使用了 bash 的專有功能,這些腳本在 sh 中可能無法正常運行。
指令執行:
- 有些指令或腳本使用了
bash 特有的功能或語法(如 [[ ... ]] 而非 [ ... ]),這些在 sh 中可能不被支持。因此,這些腳本在 sh 環境下執行時會出錯。
簡而言之,如果你的腳本使用了 bash 的專有功能,則需要在 bash 中執行才能正確工作。