M. Vazquez-Abrams benar. Ini tidak ada hubungannya dengan tanda kutip membuat hal-hal yang ada sudah string menjadi string, atau ide yang salah itu = di bash built-in [ Perintah adalah apa pun selain perbandingan string. (Baca § 6.4 dari Bash User Manual, orang-orang!) Ini semua harus dilakukan dengan apa yang terjadi pada bidang kosong setelah pemisahan bidang mengubah kata menjadi bidang.
Jika variabel shell loop kosong atau nol $loop meluas ke bidang kosong. Setelah pemisahan bidang, bidang kosong dibuang. Perhatikan bahwa pemisahan bidang dan periksa bidang kosong mendahului penghapusan kutipan. Begitu "$loop" mengembang ke bidang "", yang mana tidak kosong dan karenanya tidak dihapus. Setelah penghapusan kutipan maka itu adalah bidang kosong, yang menjadi argumen kosong ke perintah.
Itu [ perintah membutuhkannya = operator untuk memiliki dua operan, kedepan dan belakang. Yang lainnya adalah kesalahan sintaksis. Karena bidang kosong dihapus, urutan kata-kata
[ $loop = true ]
meluas ke
empat bidang
[
=
true
]
ketika [ kebutuhan perintah lima menjadi benar secara sintaksis:
[
-
=
true
]
Tentu saja, string kosong tidak sama dengan string empat karakter true, dan status keluar dari perintah adalah nol.
Sekali lagi, semua ini ada dalam Bash User Manual, dalam §3.5 dan §3.5.7. Manualnya adalah temanmu.