2008-11-20 30 views
78

Bir değişkenin normal bir ifade kullanarak geçerli bir yılı olup olmadığını kontrol etmek istiyorum. bash manual'u okudum Anladığım kadarıyla operatörü kullanabilirim = ~Bash komut dosyalarında normal ifadeleri nasıl kullanırım?

Aşağıdaki örneğe baktığımda, "Tamam değil" görmeyi beklerdim ama "Tamam" görüyorum. Neyi yanlış yapıyorum?

i="test" 
if [ $i=~"200[78]" ] 
then 
    echo "OK" 
else 
    echo "not OK" 
fi 
+0

olası yinelenen: // stackoverflow.com/questions/218156/bash-regex-with-quotes) – outis

+0

Not = ~ 'etrafında boşluk olmaması nedeniyle bu başarısız oldu. – fedorqui

cevap

111

Bu 3.1 ve 3.2 arasında değiştirilmiştir:

Bu vurmayı-3,2 eklendi Bash-3.1 serbest göre yeni özellikler bir kısa ve öz açıklamasıdır.

Dize argümanı [[= komutunun = ~ işleci ile çağrılması artık diğer eşleme ile eşleşen işleçlerde olduğu gibi dize eşleşmesini zorlar.

Yani böylece tırnaklar olmadan kullanmak:

i="test" 
if [[ $i =~ 200[78] ]] ; then 
    echo "OK" 
else 
    echo "not OK" 
fi 
+1

Alıntı yapamazsam regex boşluk içeriyorsa durumu nasıl ele alırım? Eğer regex örn. 'a + b' bir sözdizimi hatası bildirir ... – Alderath

+5

@Alderath: Boşluk ve artı karakterden kaçmak için' a \ \ + b' kullanın. – blinry

8

Sen operatör etrafında boşluk ihtiyaç = ~

 
i="test" 
if [[ $i =~ "200[78]" ]]; 
then 
    echo "OK" 
else 
    echo "not OK" 
fi 
[tırnak bash regex?] (Http
+2

paxdiablo'nun cevabı doğrudur, burada boşluklar eklememek yardımcı olmaz (artık 2008 için "tamam değil" olursunuz, eşleşen tek dizge tam anlamıyla "200 [78]"). –

İlgili konular