Bash, tekli operatörü tamsayı beklenen karşılaştırın
Aşağıdaki kodu verir
[: -ge: tekli işleç bekleniyor
ne zaman
i=0
if [ $i -ge 2 ]
then
#some code
fi
neden?
CEVAP
Senin sorunun deyimi başarısız olduğunda $i boş bir değere sahip olmalarından kaynaklanıyor.Hep alıntıeğer bunlardan biri boş olabilir en ufak bir şans varsa karşılaştırma yaparken, örneğin: değişken
if [ "$i" -ge 2 ] ; then
...
fi
Bu kabuk değişkenleri nasıl işler yüzünden. Orijinal örneğin, varsayalım
if [ $i -ge 2 ] ; then ...
Kabuk kodu, belirli bir satırı, yaptığı ilk şey, sadece favori Editörün gibi $i, değerini yerini tutamazarama ve değiştirmeişlev olacaktır. $i boş olduğunu varsayalım öyle ya, daha açıklayıcı, $i boşluk bir grup olduğunu varsayalım! Kabuk şöyle: $i yerini alacak
if [ -ge 2 ] ; then ...
Değişken kısaltmaları bitti, kabuk karşılaştırma ile devam eder ve.... o da herhangi bir şeyin anlaşılır göremez başarısız olur çünküsol-gt. Ancak, $i alıntı:
if [ "$i" -ge 2 ] ; then ...
olur:
if [ " " -ge 2 ] ; then ...
Kabuk şimdi çift tırnak, ve aslında 2 için dört boşluk karşılaştırma bilir ve if atlar görür.
Siz de aşağıdaki gibidir: $i boş $i için varsayılan değer belirtme seçeneği var
if [ "${i:-0}" -ge 2 ] ; then ...
Bu 0 yerine $i $i değeri tanımsızdır yerine. Ben, tekrar, eğer $i boşlukları bir avuç kadar sayılmaz çünkü hala tırnak bakımıtanımsız, 0, ve bir kez daha sorun haline çalışacaktır ile değiştirilecektir.
Zamanınız olduğunda this okuyun lütfen. Kabuk tedavi gibi bir kara kutu tarafından çok, ama çalışır ile çok az ve çok basit kuralları bir kez farkında olduğunuz bu kurallar (bunlardan biri olmak nasıl değişkenler iş kabuğunda, yukarıdaki talimatlara göre) kabuk olacak daha fazla sır yok.

Bash. Nasıl "iki dize sürümü"...
Tekli artı operatörü ne iş yapar?...
BASH: dize bir tamsayı olarak geçerli ...
wc sadece tamsayı olsun bash...
Neden Bayt.() karşılaştırın ve Tamsayı...