Bash
當 sh 是 bash 或 dash 的符號連結時,bash 將自身限制為符合 POSIX 標準,所以它應該 100% 與 sh 兼容?
ABck 問題:如果您有
/bin/sh
bash 的連結,那麼 bash 在呼叫時的行為與呼叫 as 時的行為/bin/sh
不同/bin/bash
。當呼叫 assh
時,它將把自己限制為主要符合 POSIX 以及一組有限的擴展。這是否意味著每當我在 Linux 中遇到帶有 shebang to sh: 的 shell 腳本時
#!/bin/sh
,即使在該發行版上,bin/sh
它是另一個 shell 的符號連結,如 dash 或 bash,它應該與 bourne shell 100% 兼容,因為它將自己限制在一組有限的擴展中?所以我可以在 FreeBSD 中執行它們嗎?有例外嗎?或者我應該可以安全地假設它會起作用?因此,如果在發行版上,
bin/sh
是 的符號連結bin/bash
,並且腳本使用#!/bin/sh
並且腳本包含 bashism,它將不會執行,因為 bash 會喜歡處於 sh 模式?
不,如果
/bin/sh
是 bash 的符號連結 bash 僅進入 posix 模式 - 來自man bash:當作為 sh 呼叫時,bash 在讀取啟動文件後進入 posix 模式。
如果您現在在bash 聯機幫助頁中搜尋 posix 模式,您會看到一些 shell 內置函式喜歡
time
或source
表現不同。就這些。bashishms 像function
在聲明函式之前編寫或使用source
而不是.
仍然會起作用,但命令的行為可能會有所不同。所以 if
/bin/sh
是/bin/bash
所有典型 bashishms 的符號連結仍然有效。有關 Posix 模式中相當廣泛的差異列表,請查看bash 參考手冊。