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

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

4

2 回答 2

6

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

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

于 2013-08-20T19:44:10.263 回答
0

手册说(强调我的):

额外的二元运算符“<code>=~”可用,其优先级与“<code>==”和“<code>!=”相同。使用时,运算符右侧的字符串 被视为扩展正则表达式并进行相应匹配。

因此,{正则表达式中的 需要转义

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

$ regex="{foo"; string="{foo"; [[ $string =~ "$regex" ]] && echo "true"
true
于 2013-08-20T20:17:06.377 回答