Lihat ini jika blok:
#!/bin/bash
str="m.m"
if [[ "${str}" =~ "m\.m" ]]; then
echo "matched"
else
echo "not matched"
exit 1
fi
exit 0
Ini harus mencetak "cocok", tetapi tidak. Di mana saya salah?
sumber
Lihat ini jika blok:
#!/bin/bash
str="m.m"
if [[ "${str}" =~ "m\.m" ]]; then
echo "matched"
else
echo "not matched"
exit 1
fi
exit 0
Ini harus mencetak "cocok", tetapi tidak. Di mana saya salah?
Anda harus menghapus kutipan dalam pertandingan regex.
if [[ ${str} =~ m\.m ]]; then
Dari halaman bash man:
[...] Operator biner tambahan, = ~, tersedia, dengan prioritas yang sama dengan == dan! =. Ketika digunakan, string di sebelah kanan operator dianggap sebagai perluasan reguler yang diperluas dan dicocokkan sesuai (seperti dalam regex (3)). Nilai kembali adalah 0 jika string cocok dengan pola, dan 1 sebaliknya. Jika ekspresi reguler salah secara sintaksis, nilai pengembalian ekspresi kondisional adalah 2. Jika nocasematch opsi shell diaktifkan, kecocokan dilakukan tanpa memperhatikan kasus karakter alfabet. Bagian mana pun dari pola dapat dikutip untuk memaksa agar dicocokkan sebagai string.
Jadi dengan kutipan, Anda menggunakan pencocokan string yang baik-lama.
Jika Anda membutuhkan spasi dalam polanya, lepas saja:
str="m m"
if [[ ${str} =~ m\ +m ]]; then
\
.${str} =~ "needle"[0-9]{1}
atau haruskah saya gunakan${str} =~ needle[0-9]{1}
?