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.