ข้อผิดพลาด regex เงื่อนไข


14
string=123456

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

สิ่งนี้ใช้ได้ดี แต่ถ้าฉันเปลี่ยน == เป็น = ~ ฉันได้รับข้อผิดพลาดนี้:

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

การใช้งาน=~ในกรณีนี้ผิด =~เปรียบเทียบลาย (ด้านซ้ายของการมอบหมาย) กับการแสดงออกปกติregexทางด้านขวาของการสรุป การแสดงออกปกติในรูปแบบที่ง่ายที่สุดจะถูกส่งผ่านเช่น'[0-9][0-9]'
Valentin Bajrami

9
@ val0x00ff แต่123456เป็น RE ที่ถูกต้อง
roaima

@roaima เห็นด้วยอย่างไรก็ตาม regex นั้นเป็นที่รู้จักกันดีในเรื่องของเครื่องยนต์การอ้างอิงย้อนกลับชุดอักขระตัวอักษรเมตาดาต้าที่แสดงถึงการเริ่มต้นของสตริงการสิ้นสุดของสตริงเป็นต้น
Valentin Bajrami

คำตอบ:


29

การจับคู่ regexของ Bashใช้ได้เฉพาะภายในวงเล็บเหลี่ยมสองชั้นเท่านั้น[[ ... ]]:

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

@Kusalananda: เกี่ยวกับการแก้ไขไม่จำเป็นต้องใส่เครื่องหมายอัญประกาศที่ด้านซ้ายของนิพจน์วงเล็บเหลี่ยม[[ ... ]]เนื่องจากไม่มีการแยกคำหรือการขยายชื่อพา ธ ที่นั่น พวกเขาจำเป็นเท่านั้นเมื่อใช้วงเล็บเดียว[ ... ](ทั้งสองด้าน) และทางด้านขวาของนิพจน์วงเล็บเหลี่ยมสองอัน
user000001

@ user000001 ในขณะที่คุณถูกต้องจะดีกว่าเพียงแค่อ้างตัวแปรทั้งหมดโดยการสะท้อนกลับเว้นแต่จะไม่มีความจำเป็น มันเป็นนิสัยที่ปลอดภัยกว่ามาก
โจ

@ โจ: เห็นด้วยเมื่อมีข้อสงสัยอ้าง ... ฉันพูดถึงเรื่องนี้เพราะมันเป็นคำตอบที่ถูกต้องแก้ไขแล้ว หากมีการแก้ไขครั้งแรกฉันจะไม่แสดงความคิดเห็นในเรื่องนี้
user000001
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.