SORU
3 Ocak 2009, CUMARTESİ


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
3 Mart 2009, Salı


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FUzzyBUnnyBOoties

    FUzzyBUnnyBO

    3 EKİM 2007
  • Kai Moosmann

    Kai Moosmann

    5 Temmuz 2006
  • TheJoeycool2010

    TheJoeycool2

    12 Temmuz 2010