Bu soru benim önceki sorumun bir devamı . Bu sitedeki kullanıcılar nazikçe for
dize değerleri üzerinde yinelenen bir bash döngüsünün nasıl yazılacağını belirlememe yardımcı oldu . Örneğin, bir döngü kontrol değişkeninin fname
dizeler üzerinde yinelendiğini varsayalım "a.txt" "b.txt" "c.txt"
. echo
"Evet!" İstiyorum . ne zaman fname
değeri "a.txt"
ya da "c.txt"
ve echo
"hayır!" aksi takdirde. Aşağıdaki bash kabuk betiğini denedim:
#!/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
Çıktıyı alıyorum:
a.txt
Hayır!
b.txt
Hayır!
c.txt
Evet!
Değer if
göründüğünde ifadesi neden açıkça görünmüyor ? Yanlış mı kullandım ?fname
"a.txt"
|
-o
aynı mesafede [ ]
.
||
ve ayrı [ ]
üzerinde -o
çünkü sadece taşınabilirlik için [
fazla 4 argümanları desteklemek için garanti edilmez. Tabii ki hedef dil ise bash
, hiç kimse yine de kullanmamalı, [
çünkü bash
's' [[
birçok yönden üstün.
if [[ "$fname" = "a.txt" ]] || [[ "$fname" = "c.txt" ]]
ziyade if [ "$fname" = "a.txt" ] || [ "$fname" = "c.txt" ]
?
bash
. Bunun bir avantajı, [[
kelime bölme yapmamasıdır (özel durum) bu yüzden [[ $unquoted_var = string ]]
güvenlidir.