Điều kiện lỗi regex


14
string=123456

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

Điều này hoạt động tốt, nhưng nếu tôi thay đổi == thành = ~ Tôi gặp lỗi này:

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

Việc sử dụng =~là trong trường hợp này sai. =~so sánh các patter (bên trái của bài tập) với một biểu hiện thường xuyên regexở phía bên phải của khẳng định. Một biểu thức chính quy ở dạng đơn giản nhất của nó được thông qua như'[0-9][0-9]'
Valentin Bajrami

9
@ val0x00ff nhưng 123456là RE hợp lệ
roaima

@roaima đồng ý, tuy nhiên regex được biết đến với công cụ của nó, tham chiếu ngược, bộ ký tự, ký tự meta biểu thị bắt đầu một chuỗi, kết thúc chuỗi, v.v.
Valentin Bajrami

Câu trả lời:


28

Bash 's regex phù hợp chỉ hoạt động trong dấu ngoặc vuông kép[[ ... ]]:

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

@Kusalananda: Liên quan đến chỉnh sửa, các trích dẫn không được yêu cầu ở phía bên trái của biểu thức ngoặc kép [[ ... ]], vì không có sự phân tách từ hoặc mở rộng tên đường dẫn xảy ra ở đó. Chúng chỉ cần thiết khi sử dụng dấu ngoặc đơn [ ... ](cả hai mặt) và ở bên phải của biểu thức dấu ngoặc kép.
user000001

@ user000001 trong khi bạn đúng, tốt hơn hết là chỉ trích dẫn tất cả các biến theo phản xạ trừ khi không cần thiết phải làm vậy. Đó là một thói quen an toàn hơn nhiều.
Joe

@Joe: Đồng ý, khi nghi ngờ, trích dẫn ... Tôi chỉ đề cập đến điều này bởi vì nó là một chỉnh sửa cho một câu trả lời đã đúng. Nếu nó đã ở đó từ lần sửa đổi đầu tiên, tôi sẽ không bình luận gì về điều này.
user000001
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.