Kondisi kesalahan regex


14
string=123456

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

Ini berfungsi dengan baik, tetapi jika saya mengubah == ke = ~ Saya mendapatkan kesalahan ini:

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

Penggunaan =~dalam hal ini salah. =~membandingkan derai (sisi kiri penugasan) dengan ekspresi reguler regexdi sisi kanan persembahan. Ekspresi reguler dalam bentuknya yang paling sederhana dilewatkan seperti'[0-9][0-9]'
Valentin Bajrami

9
@ val0x00ff tetapi 123456RE yang valid
roaima

@roaima setuju, namun regex dikenal dengan mesinnya, referensi-kembali, karakter-set, karakter meta yang menunjukkan awal dari sebuah string, akhir dari sebuah string, dll.
Valentin Bajrami

Jawaban:


28

Bash 's regex yang cocok hanya berfungsi dalam tanda kurung siku ganda[[ ... ]]:

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

@ Kusalananda: Mengenai pengeditan, tanda kutip tidak diperlukan di sisi kiri ekspresi kurung ganda [[ ... ]], karena tidak ada pemisahan kata atau perluasan nama path terjadi di sana. Mereka hanya diperlukan ketika menggunakan tanda kurung tunggal [ ... ](kedua sisi) dan di sebelah kanan ekspresi braket ganda.
user000001

@ user000001 ketika Anda benar, jauh lebih baik hanya mengutip semua variabel dengan refleks kecuali ada keharusan untuk tidak melakukannya. Itu kebiasaan yang jauh lebih aman.
Joe

@ Jo: Setuju, ketika ragu, kutip ... Saya hanya menyebutkan ini karena itu adalah edit untuk jawaban yang sudah benar. Seandainya sudah ada sejak revisi pertama saya tidak akan mengomentari ini.
user000001
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.