ดูที่นี่ถ้าบล็อก:
#!/bin/bash
str="m.m"
if [[ "${str}" =~ "m\.m" ]]; then
echo "matched"
else
echo "not matched"
exit 1
fi
exit 0
สิ่งนี้ควรพิมพ์ "จับคู่" แต่ไม่ควรพิมพ์ ฉันจะไปไหนผิด
ดูที่นี่ถ้าบล็อก:
#!/bin/bash
str="m.m"
if [[ "${str}" =~ "m\.m" ]]; then
echo "matched"
else
echo "not matched"
exit 1
fi
exit 0
สิ่งนี้ควรพิมพ์ "จับคู่" แต่ไม่ควรพิมพ์ ฉันจะไปไหนผิด
คำตอบ:
คุณต้องลบข้อความในการแข่งขัน regex
if [[ ${str} =~ m\.m ]]; then
จากหน้าคนทุบตี:
[... ] มีตัวดำเนินการไบนารีเพิ่มเติม = ~ พร้อมใช้งานโดยมีลำดับความสำคัญเท่ากับ == และ! = เมื่อมีการใช้งานสตริงทางด้านขวาของโอเปอเรเตอร์จะถูกพิจารณาว่าเป็น expres‐sion แบบปกติที่ขยายเพิ่มและจับคู่ตามนั้น (เช่นใน regex (3)) ค่าตอบแทนคือ 0 ถ้าสตริงตรงกับรูปแบบและ 1 เป็นอย่างอื่น หากนิพจน์ทั่วไปไม่ถูกต้องทางไวยากรณ์ค่าส่งคืนของนิพจน์เงื่อนไขคือ 2 หากเปิดใช้งานอ็อพชัน nocasematch ของตัวเลือกเชลล์การจับคู่จะดำเนินการโดยไม่คำนึงถึงตัวอักษรที่เป็นตัวอักษร ส่วนใดส่วนหนึ่งของรูปแบบอาจถูกยกมาเพื่อบังคับให้มันจับคู่เป็นสตริง
ดังนั้นด้วยคำพูดคุณกำลังใช้การจับคู่สตริงที่ดี
หากคุณต้องการช่องว่างในรูปแบบเพียงแค่หลบหนี:
str="m m"
if [[ ${str} =~ m\ +m ]]; then
\
นี้
${str} =~ "needle"[0-9]{1}
หรือควรใช้${str} =~ needle[0-9]{1}
?