POSIX shとBashで異なることを行うコードを次に示します。
hello &> world
それがあなたにとって「無効」であるかどうかはわかりません。
バッシュでは、標準出力と標準エラー出力の両方をリダイレクトからhello
ファイルにworld
。POSIXではsh
、hello
バックグラウンドで実行されworld
、空のリダイレクトをに行い、切り捨てます(つまり、として処理されます& >
)。
Bash拡張機能が実行されると、Bash拡張機能が機能bash
し、純粋なPOSIXでは異なる効果を持つ他の多くのケースがありsh
ます。たとえば、ブレース展開は別のものであり、BashのPOSIXモードでも同じように動作しますが、そうではありません。
静的な構文エラーに関する限り、BashにはPOSIXで指定されていない予約語([[
andなどtime
)があります。これ[[ x
は、有効なPOSIXシェルコードであるがBash構文エラーであり、構文エラーを引き起こす可能性のあるさまざまなPOSIX非互換性バグの履歴です。この質問からのような:
x=$(cat <<'EOF'
`
EOF
)
bash: line 2: unexpected EOF while looking for matching ``'
bash: line 5: syntax error: unexpected end of file
Syntax-errors-onlyは、それが重要なあらゆる状況での「無効」のかなり危険な定義ですが、そこにはあります。