7 HAZİRAN 2011, Salı
BASH basit mantıksal operatörler
Birkaç seçeneğim var ve aşağıdaki koşulları sözleri, bash betik başarısız bir girişimi sonra yazılmış) kontrol etmek istiyorum:
if varA EQUALS 1 AND ( varB EQUALS "t1" OR varB EQUALS "t2" ) then
do something
done.
Ve benim başarısız girişim olarak, ben ile geldi:
if (($varA == 1)) && ( (($varB == "t1")) || (($varC == "t2")) );
then
scale=0.05
fi
CEVAP
7 HAZİRAN 2011, Salı
Yazdıklarını aslında neredeyse çalışır (eğer tüm değişkenler sayılar olsaydı işe yarar), ama hiç deyimsel bir yol değil.
(…)
parantez subshell bir işaret. İçinde ne birçok diğer diller gibi bir ifade değil. Komutları (sadece dış parantez gibi) bir listesini. Bu komutları yeniden yönlendirme, atama, vs çok ayrı bir alt süreci içinde idam edilir. parantez içinde yürüttü parantez dışında hiçbir etkisi yok.- Bir lider, dolar işareti,
$(…)
command substitution: bir komut parantez içinde ve çıkış komutu kullanılır bir parçası olarak komut satırı (sonra ekstra açılımları sürece yerine koyma arasında çift tırnak, ama bu another story).
- Bir lider, dolar işareti,
{ … }
parantez içinde grup komutları parantez gibi, ama onlar sadece ayrıştırma, gruplandırma değil etkisi. Programx=2; { x=4; }; echo $x
x=2; (x=4); echo $x
ise 4, baskı 2 Baskı. (Ayrıca parantez etrafında boşluklar olsun ve kapatmadan önce bir noktalı virgül, parantez yok ise. Bu sözdizimi bir cilvesi.)- ,
${VAR}
lider dolar işareti olan bir değişken, Olası ekstra dönüşümler ile değeri ** 38, genişleyen.
- ,
((…))
çift parantez içinde sayılar üzerinde* *39, yani bir hesaplama, bir sözdizimi ile diğer programlama dillerini andıran bir surround. Bu sözdizimi, çoğunlukla bilgi almak atamaları için kullanılır.- Aynı sözdizimi aritmetik ifadelerde kullanılan ifadenin tamsayı değeri genişletmek
$((…))
,.
- Aynı sözdizimi aritmetik ifadelerde kullanılan ifadenin tamsayı değeri genişletmek
[[…]]
çift parantez conditional expressions surround. Koşullu ifadeler çoğunlukla-n $variable
gibi operators eğer bir değişken bir dosya olup olmadığını test etmek için boş ve-e $file
eğer test etmek için inşa edilmiştir. Ayrıca dize eşitlik operatörleri:"$string1" = "$string2"
(dikkat sağ tarafı desen, örneğin[[ $foo = a* ]]
sınav$foo
ile başlara
[[ $foo = "a*" ]]
testler$foo
tam olaraka*
), ve tanıdık!
,&&
||
operatörler için olumsuzluk, birlikte ve çözüm olarak parantez için gruplandırma. Her operatör ([[ "$x" = "$y" ]]
örneğin, değil . etrafında bir yere ihtiyacınız olduğunu unutmayın ^s>[[ "$x"="$y" ]]
ve bir boşluk ya da parantez içinde ve dışında;
gibi bir karakter (*30 örneğin*).[[-n $foo]]
[ … ]
tek bir parantez daha tuhaflıklar ile koşullu ifadeler (ama daha yaşlı ve daha taşınabilir) diğer bir form vardır. Herhangi bir yazma yok şimdilik; bunları içeren komut dosyalarını bulduğunuzda, onlar hakkında endişelenmek.
Bu bash test yazmak deyimsel bir şekilde
if [[ $varA = 1 && ($varB = "t1" || $varC = "t2") ]]; then
Eğer diğer kabukları taşınabilirlik ihtiyacınız varsa, bu şekilde (not ek aktardığı ve her bireyin test parantezler içinde ayrı ayarlar şöyle olmalı:
if [ "$varA" = 1 ] && { [ "$varB" = "t1" ] || [ "$varC" = "t2" ]; } then
Bunu Paylaş:
Mantıksal operatörler yazılı sürümleri...
Mantıksal operatörler ("ve",...
Nasıl Python ile basit bir ileti kutus...
Bash: bir anahtar belirtmeden dizi değ...
Bash dosya yolu bir tartışmada her zam...