Şu bloklara bakın:
#!/bin/bash
str="m.m"
if [[ "${str}" =~ "m\.m" ]]; then
echo "matched"
else
echo "not matched"
exit 1
fi
exit 0
Bu "eşleşen" yazdırmalıdır, ancak yazdırmaz. Nerede yanlış gidiyorum?
Şu bloklara bakın:
#!/bin/bash
str="m.m"
if [[ "${str}" =~ "m\.m" ]]; then
echo "matched"
else
echo "not matched"
exit 1
fi
exit 0
Bu "eşleşen" yazdırmalıdır, ancak yazdırmaz. Nerede yanlış gidiyorum?
Yanıtlar:
Normal ifade eşleşmesinde alıntıyı kaldırmanız gerekir.
if [[ ${str} =~ m\.m ]]; then
Bash man sayfasından:
[...] == ve! = İle aynı önceliğe sahip ek bir ikili operatör, ~ ~ kullanılabilir. Kullanıldığında, operatörün sağındaki dize uzatılmış düzenli ifade olarak kabul edilir ve buna göre eşleştirilir (normal ifadede (3) olduğu gibi). Dize kalıpla eşleşirse dönüş değeri 0, aksi takdirde 1 olur. Normal ifade sözdizimsel olarak yanlışsa, koşullu ifadenin dönüş değeri 2'dir. Kabuk seçeneği nocasematch etkinleştirilirse, eşleme alfabetik karakterlere bakılmaksızın gerçekleştirilir. Desenin herhangi bir kısmı, onu bir dize olarak eşleşmeye zorlamak için alıntılanabilir.
Tırnak işaretleri ile eski dize eşleme kullanıyorsunuz.
Desende boşluklara ihtiyacınız varsa, onlardan kaçın:
str="m m"
if [[ ${str} =~ m\ +m ]]; then
\
.
${str} =~ "needle"[0-9]{1}
istersem kullanmalı ${str} =~ needle[0-9]{1}
mıyım?