Koşul normal ifade hatası


14
string=123456

if [ $string == 123456 ]; then
echo 123
fi

Bu iyi çalışıyor, ancak == = = değiştirmek durumunda bu hatayı alıyorum:

./test: line 3: [: =~: binary operator expected

Kullanımı =~bu durumda yanlış içindedir. =~pıtırtıyı (ödevin sol tarafı), tahsinin regexsağ tarafındaki düzenli ifadeyle karşılaştırır. En basit haliyle düzenli bir ifade geçer'[0-9][0-9]'
Valentin Bajrami

9
@ val0x00ff ama 123456geçerli bir RE
roaima

@roaima kabul etti, ancak regex motoru, geri gönderme, karakter seti, bir dizenin başlangıcını, ipin bitmesini vb. gösteren meta karakterlerle bilinir.
Valentin Bajrami

Yanıtlar:


29

Bash 'ın regex eşleştirme sadece çift köşeli parantez içinde çalışır[[ ... ]]:

string=123456
if [[ "$string" =~ 123456 ]]; then echo 123; fi
123

@Kusalananda: Düzenleme ile ilgili olarak, çift köşeli parantez ifadesinin sol tarafında tırnak işareti gerekli değildir [[ ... ]], çünkü orada kelime bölünmesi veya yol adı genişletmesi gerçekleşmez. Sadece tekli parantez [ ... ](her iki taraf) ve çift parantez ifadesinin sağ tarafında kullanılırlar.
user000001

@ user000001 doğru yaparken, bir değişkene gerek olmadığı sürece tüm değişkenleri refleksle alıntılamak çok daha iyidir. Çok daha güvenli bir alışkanlık.
Joe

@Joe: Şüphe duyduğumda, alıntı yaptım ... Sadece bundan bahsettim çünkü zaten doğru bir cevaba yapılan bir düzenlemeydi. Orada ilk revizyondan olsaydı ben bu konuda yorum olmazdı.
user000001
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.