Beberapa shell historis menerapkan parser yang sangat sederhana yang dapat dikacaukan oleh hal-hal seperti di [ -n = "" ]
mana operan pertama =
terlihat seperti operator, dan akan menguraikannya sebagai [ -n = ]
atau menyebabkan kesalahan sintaksis. Dalam [ "x$1" = x"" ]
, x
awalan memastikan bahwa x"$1"
tidak mungkin terlihat seperti operator, dan satu-satunya cara shell dapat menguraikan tes ini adalah dengan memperlakukan =
sebagai operator biner.
Semua shell modern, dan bahkan sebagian besar shell yang lebih lama masih beroperasi, ikuti aturan POSIX yang mengamanatkan bahwa semua ekspresi uji hingga 4 kata diurai dengan benar. Jadi [ -z "$1" ]
adalah cara yang tepat untuk menguji jika $1
kosong , dan [ "$x" = "$y" ]
merupakan cara yang tepat untuk menguji kesetaraan dua variabel.
Bahkan beberapa shell saat ini dapat dikacaukan dengan ekspresi yang lebih lama, dan beberapa ekspresi sebenarnya ambigu, jadi hindari penggunaan -a
dan -o
operator untuk membangun tes boolean yang lebih lama, dan alih-alih gunakan panggilan terpisah ke [
dan shell milik sendiri &&
dan ||
operator boolean.
sh
pada beberapa Unix komersial masih memiliki masalah. Lihat di sini untuk detailnya.