Saya memiliki skrip bash berikut:
while [ $loop == "true" ]
do
//do stuff
done
tetapi mengatakan kesalahan di [.
Ini juga berjalan sebagai daemon, ketika argumen berhenti dilewatkan ke skrip ... loop harus Saya menduga pengaturan $ loop ke false akan secara otomatis mengakhiri loop.
Jawaban:
Cara terbaik untuk mengetik ini adalah:
Baca bagian "Mengerjakan perintah uji" di URL berikut:
http://wiki.bash-hackers.org/syntax/quoting
sumber
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
=
dibash
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
meluas ke empat bidang[
perintah membutuhkannya=
operator untuk memiliki dua operan, kedepan dan belakang. Yang lainnya adalah kesalahan sintaksis. Karena bidang kosong dihapus, urutan kata-kata[
=
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.
sumber