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
中執行才能正確工作。