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

  • ExcelIsFun

    ExcelIsFun

    16 ŞUBAT 2008
  • Jared Busch

    Jared Busch

    25 Mayıs 2011
  • Major FX

    Major FX

    6 HAZİRAN 2012