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:
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
[[ $var =~ ^-?[0-9] $ ]]
Nasıl dize Bash kabuğu ile dosyasında ...
Eğer bir dize temelde tırnak Ruby kull...
Eğer bir dize geçerli bir adres olup o...
Eğer bir dize geçerli bir sayı olup ol...
Nasıl kullanarak/Catch olmadan bir diz...