必须在正则表达式中转义前导大括号吗?

时间:2013-08-20 19:40:35

标签: regex bash

regex="\{foo"; string="{foo"; [[ $string =~ $regex ]] && echo "true"

这是一个在Bash 3.x和4.x中运行的bash脚本。如果“\”被删除,那么它将停止在Bash 4.x中工作。这种行为是否预期和/或是一个错误?正则表达式(7)手册页建议不需要转义。其他正则表达式是否需要转义大括号?

2 个答案:

答案 0 :(得分:6)

需要对开口括号进行转义,因为它表示量词的起点 - {m,n}。我没有使用任何正则表达式的味道,它可以在不转义{的情况下工作。但是,我不能对所有人发表评论。但原因很合乎逻辑。

出于同样的原因,你需要转义左括号 - [,因为它表示一个字符类的开头。

答案 1 :(得分:0)

manual说(强调我的):

  

另一个二元运算符“=~”可用,具有相同的功能   优先级为“==”和“!=”。使用时,字符串为右侧   运算符被认为是扩展正则表达式和   相应地匹配。

因此,正则表达式中的{必须为escaped

但是,您可以通过引用bash运算符的rhs上的字符串来强制=~执行字符串比较。

$ regex="{foo"; string="{foo"; [[ $string =~ "$regex" ]] && echo "true"
true