Pertanyaan ini adalah sekuel dari pertanyaan saya sebelumnya . Para pengguna di situs ini dengan baik hati membantu saya menentukan cara menulis bash for
loop yang diulang pada nilai string. Sebagai contoh, misalkan variabel kontrol loop fname
berulang di atas string "a.txt" "b.txt" "c.txt"
. Saya ingin echo
"ya!" kapan fname
memiliki 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 if
pernyataan itu ternyata menghasilkan kebenaran ketika fname
memiliki nilai "a.txt"
? Apakah saya |
salah menggunakan ?
-o
dalam yang sama [ ]
.
||
dan memisahkan [ ]
lebih -o
untuk 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.