条件正则表达式错误


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同意,但是正则表达式是著名的发动机,后引用,字符集,字符元表示字符串的开始,字符串等的结局
瓦伦丁巴伊拉米

Answers:


29

Bash正则表达式匹配仅在双方括号内起作用[[ ... ]]

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

@Kusalananda:关于编辑,双括号表达式的左手边不需要引号[[ ... ]],因为那里没有单词拆分或路径名扩展。仅在使用单括号[ ... ](两侧)时以及在双括号表达式的右侧时才需要使用它们。
user000001 17-10-23

@ user000001正确时,最好通过反射引用所有变量,除非有必要不要这样做。这是一个更安全的习惯。

@Joe:同意,如果有疑问,请报价。。。我之所以只提到它,是因为这是对已经正确答案的修改。如果从第一个修订版开始,我就不会对此发表评论。
user000001 17-10-28
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.