Bash

當 sh 是 bash 或 dash 的符號連結時,bash 將自身限制為符合 POSIX 標準,所以它應該 100% 與 sh 兼容?

  • March 2, 2017

bash 和 sh 之間的區別

ABck 問題:如果您有/bin/shbash 的連結,那麼 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 內置函式喜歡timesource表現不同。就這些。bashishms 像function在聲明函式之前編寫或使用source而不是.仍然會起作用,但命令的行為可能會有所不同。

所以 if/bin/sh/bin/bash所有典型 bashishms 的符號連結仍然有效。

有關 Posix 模式中相當廣泛的差異列表,請查看bash 參考手冊

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