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.