Pertanyaan ini adalah sekuel dari pertanyaan saya sebelumnya . Para pengguna di situs ini dengan baik hati membantu saya menentukan cara menulis bash forloop yang diulang pada nilai string. Sebagai contoh, misalkan variabel kontrol loop fnameberulang di atas string "a.txt" "b.txt" "c.txt". Saya ingin echo"ya!" kapan fnamememiliki nilai "a.txt"atau "c.txt", dan echo"tidak!" jika tidak. Saya telah mencoba skrip bash shell berikut:
#!/bin/bash
for fname in "a.txt" "b.txt" "c.txt"
do
echo $fname
if [ "$fname" = "a.txt" ] | [ "$fname" = "c.txt" ]; then
echo "yes!"
else
echo "no!"
fi
done
Saya mendapatkan output:
a.txt
tidak!
b.txt
tidak!
c.txt
Iya!
Mengapa ifpernyataan itu ternyata menghasilkan kebenaran ketika fnamememiliki nilai "a.txt"? Apakah saya |salah menggunakan ?
-odalam yang sama [ ].
||dan memisahkan [ ]lebih -ountuk portabilitas hanya karena [tidak dijamin untuk mendukung lebih dari 4 argumen. Tentu saja jika bahasa target bash, tidak ada yang harus menggunakan [lagian karena bash's [[lebih unggul dalam banyak hal.
if [[ "$fname" = "a.txt" ]] || [[ "$fname" = "c.txt" ]]daripada if [ "$fname" = "a.txt" ] || [ "$fname" = "c.txt" ]?
bash, seperti yang sudah Anda lakukan. Salah satu keuntungan [[adalah tidak melakukan pemisahan kata (case khusus) sehingga [[ $unquoted_var = string ]]aman.