Bu soru benim önceki sorumun bir devamı . Bu sitedeki kullanıcılar nazikçe fordize 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 fnamedizeler üzerinde yinelendiğini varsayalım "a.txt" "b.txt" "c.txt". echo"Evet!" İstiyorum . ne zaman fnamedeğ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 ifgöründüğünde ifadesi neden açıkça görünmüyor ? Yanlış mı kullandım ?fname"a.txt"|
-oaynı 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.