Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
regex="\{foo"; string="{foo"; [[ $string =~ $regex ]] && echo "true"
这是一个适用于 Bash 3.x 和 4.x 的 bash 脚本。如果删除了“\”,那么它将在 Bash 4.x 中停止工作。这种行为是预期的和/或错误吗?regex(7) 手册页表明不需要转义。其他风格的正则表达式是否需要转义大括号?
左大括号需要转义,因为它表示量词的开始 - {m,n}。我没有使用任何正则表达式风格,它可以在没有转义的情况下工作{。但是,我不能对所有人发表评论。但原因很合逻辑。
{m,n}
{
出于同样的原因,您需要转义左括号 - [,因为它表示字符类的开始。
[
手册说(强调我的):
额外的二元运算符“<code>=~”可用,其优先级与“<code>==”和“<code>!=”相同。使用时,运算符右侧的字符串 被视为扩展正则表达式并进行相应匹配。
因此,{正则表达式中的 需要转义。
bash但是,您可以通过在运算符的 rhs 上引用字符串来强制执行字符串比较=~。
bash
=~
$ regex="{foo"; string="{foo"; [[ $string =~ "$regex" ]] && echo "true" true