shがbashまたはdashへのシンボリックリンクの場合、bashはPOSIX準拠に制限されているため、shと100%互換性があるべきですか?

shがbashまたはdashへのシンボリックリンクの場合、bashはPOSIX準拠に制限されているため、shと100%互換性があるべきですか?

~からbashとshの違い:

質問に答えるには:/bin/shasからbashへのリンクがある場合、bashは/bin/sh呼び出されたときと呼び出されたときと同じようには機能しません/bin/bash。呼び出されると、sh制限された拡張セットを使用して、主にPOSIX互換に制限されます。

これは、Linuxでsh:というシェルスクリプトを持つシェルスクリプトに会うたび#!/bin/shに、dashやbashなどの他のシェルへのシンボリックリンクであるそのディストリビューションでも、bin/shBourneシェルと100%互換性がなければならないことを意味しますか?制限された拡張セットに制限されますか?では、FreeBSDで実行できますか?例外がありますか?それとも、それがうまくいくと安全に想定できるべきですか?

したがって、ディストリビューションでbin/shはい、シンボリックリンクがbin/bash使用され#!/bin/sh、スクリプトにbashismが含まれている場合、bashはshモードにあるため実行されませんか?

ベストアンサー1

いいえ、/bin/shbashはbashへのシンボリックリンクの場合にのみposixモードに入ります。男乱交:

sh で呼び出されると、 bash は起動ファイルを読み込み、posix モードに入ります。

今posixパターンを検索するとバッシュマンページ一部のシェル組み込み機能は類似timeまたはsource異なる動作をすることがわかります。それはすべてです。function関数を宣言する前に作成したり、source代わりに使用したりするようなBashishは機能しますが、.コマンドは異なる動作をする可能性があります。

したがって、/bin/shすべての一般的なbashishmへのシンボリックリンクはまだ機能します。/bin/bash

Posixモードの違いの非常に広範なリストについては、以下を確認してください。バッシュリファレンスマニュアル

おすすめ記事