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.