Linux

什麼不是外殼特定的?

  • December 4, 2013

在某些答案下,我看到建議在答案中避免使用特定於 shell 的命令的評論。

我如何知道所有 shell 中存在哪些命令、運算符等?有標準清單嗎?

  • man builtins給出命令列表。這些是我可以在適用於所有 shell 的可移植 shell 腳本中使用的唯一命令嗎?
  • 內置可以是特定於外殼的嗎?
  • Linux 的標準與其他 Unix 的標準是否不同?
  • 語法呢?標點符號、運算符等在某些 shell 中可以不同嗎?

Greg 的 Wiki有一篇關於為 Dash 調整 bash 腳本的文章,其中指出了許多“bashisms”——非標準但屬於 bash 一部分的額外功能。避免這些 bashism 有助於使您的腳本對不同的環境更友好。這特別回答了你的一些問題。例如,是的,有一些不同的運算符(如==),但有一個標準的 Posix 集應該適用於所有環境。

如需更深入的閱讀,您可以查看所有 shell 都應遵守的Posix 標準。特別是“Shell & Utilities”一卷。

我發現比 shell 差異更具挑戰性的是命令差異。許多 Linux 系統都有 GNU find,但是如果你正在編寫一個可移植的腳本,不要依賴你自己的man find,因為那裡有很多帶有 BSD 的系統find,它具有不同的功能集。如果您正在為busybox 編寫腳本,您會發現不同版本nc的s 完全不同。當我將腳本部署到不同的環境時,這些都是我經常遇到的事情。

有關良好的 shell 腳本實踐的額外閱讀,在 David Pashley 的部落格上也有一個很好的資源:Writing Robust Bash Shell Scripts

另外,請確保您閱讀了Gilles在本網站上的回答和評論。他有很多關於確保您使用可移植程式碼的技巧。

引用自:https://unix.stackexchange.com/questions/20538