Hãy xem xét các đoạn mã sau:Bash đôi dấu ngoặc vuông regex trận vấn đề
$ var1=bingo
$ var2=.ingo
$ if [[ "$var1" =~ $var2 ]]; then echo found; fi
found
$ if [[ $var1 =~ "$var2" ]]; then echo found; fi # line 5
$ if [[ "$var1" =~ "$var2" ]]; then echo found; fi # line 6
$ if [[ $var1 =~ $var2 ]]; then echo found; fi
found
Trên đây là những gì tôi đã làm trong bash shell.
Câu hỏi là tại sao không có dòng 5
và 6
in found
?
Tôi nghĩ rằng tôi đã biết câu trả lời, nhưng tôi đang tìm kiếm một câu trả lời đơn giản dễ tiêu hóa.
Để kết luận, khi một biến (bên trong dấu ngoặc kép) được sử dụng ở bên phải =~
, các dấu ngoặc kép sẽ chỉ phục vụ cho việc mở rộng biến?
@fedorqui: Cảm ơn bạn đã chỉnh sửa, cách tốt nhất để đặt nó thực sự là – sjsam
Bất kỳ phần nào của toán hạng bên phải '= ~' được trích dẫn được đối sánh dưới dạng chuỗi ký tự. –
Bản sao có thể có của [Tại sao không thể sử dụng các ký tự chuỗi trong các phép thử biểu thức chính quy?] (Http://stackoverflow.com/questions/6665529/why-cant-string-literals-be-used-in-bash-regular -expression-tests) –