BASH: dize bir tamsayı olarak geçerli olup olmadığını Test? | Netgez.com
SORU
5 ŞUBAT 2010, Cuma


BASH: dize bir tamsayı olarak geçerli olup olmadığını Test?

Sık rastlanan bir şey yapmaya çalışıyorum: kabuk Ayrıştırma kullanıcı girişi. Eğer kullanıcı geçerli bir tamsayı verdiyse, senaryoyu bir şey yapar ve geçerli değilse, başka bir şey yok. Sorun, bu ayrı char almaya char ile yapmak istemiyorum yapmanın (ve makul) zarif kolay bir yol bulamadım.

Bu kadar kolay olduğunu biliyorum ama nasıl olduğunu bilmiyorum. Bir düzine dilde yap, ama BASH!

Araştırmamda bunu buldum:

http://stackoverflow.com/questions/136146/regular-expression-to-test-whether-a-string-consists-of-a-valid-real-number-in-ba

Ve düzenli bahsettiği bir cevap orada var, ama bildiğim kadarıyla, bir işlevi C mevcut (diğerleri arasında). Hala, grep ile denedim çok harika bir cevap gibi görünüyordu, ama grep ne yapacağını bilmiyordu. Denedim kutudan PERL regexp gibi davranmak anlamına gelir-P - nada. Dash E (-E) da işe yaramadı. Ve ne-F. yaptı

Açık olalım, böyle bir şey, herhangi bir çıkış aramaya çalışıyorum oradan ne alırsam yararlanmak için script hack edeceğim. (DÜŞÜK, çok geçerli tekrarlanan alırken olmayan uygun bir giriş yok döndüren bekliyordum.)

snafu=$(echo "$2" | grep -E "/^[- ]?(?:\.[0-9] |(?:0|[1-9][0-9]*)(?:\.[0-9]*)?)$/")
if [ -z "$snafu" ] ;
then
   echo "Not an integer - nothing back from the grep"
else
   echo "Integer."
fi

Birisi bunu en kolay şekilde nasıl yapıldığını göstermek lütfen?

Açıkçası, bu TESTİN kısa geliyor, bana göre. Böyle bir bayrak olmalıdır

if [ -I "string" ] ;
then
   echo "String is a valid integer."
else
   echo "String is not a valid integer."
fi

Teşekkürler.

CEVAP
5 ŞUBAT 2010, Cuma


[[ $var =~ ^-?[0-9] $ ]]

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DetroitBORG

    DetroitBORG

    29 Temmuz 2008
  • friendz.net

    friendz.net

    29 EKİM 2010
  • Palmundo Ec

    Palmundo Ec

    11 HAZİRAN 2009

İLGİLİ SORU / CEVAPLAR