Berikut adalah beberapa kode yang melakukan sesuatu yang berbeda di POSIX sh dan Bash:
hello &> world
Apakah itu "tidak valid" untuk Anda, saya tidak tahu.
Di Bash, ini mengarahkan ulang output standar dan kesalahan standar dari hello
ke file world
. Dalam POSIX sh
, ini berjalan hello
di latar belakang dan kemudian membuat pengalihan kosong ke world
, memotongnya (yaitu diperlakukan sebagai & >
).
Ada banyak kasus lain di mana ekstensi Bash akan melakukan hal mereka ketika dijalankan di bawah bash
, dan akan memiliki efek yang berbeda dalam POSIX murni sh
. Sebagai contoh, ekspansi brace adalah hal lain, dan itu juga beroperasi sama di bawah mode POSIX Bash dan tidak.
Sejauh kesalahan sintaks statis berjalan, Bash memiliki kata-kata yang dicadangkan (seperti [[
dan time
) tidak ditentukan oleh POSIX, sedemikian sehingga [[ x
merupakan kode shell POSIX yang valid tetapi kesalahan sintaks Bash, dan riwayat berbagai bug inkompatibilitas POSIX yang dapat mengakibatkan kesalahan sintaksis, seperti yang dari pertanyaan ini :
x=$(cat <<'EOF'
`
EOF
)
bash: line 2: unexpected EOF while looking for matching ``'
bash: line 5: syntax error: unexpected end of file
Sintaks-kesalahan-saja adalah definisi yang cukup berbahaya dari "tidak valid" untuk keadaan apa pun yang penting, tetapi ada itu.