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

  • bobinire

    bobinire

    24 EYLÜL 2006
  • InfinityWard

    InfinityWard

    19 EYLÜL 2006
  • MW Technology

    MW Technolog

    28 EKİM 2009