我正在尝试在bash脚本中匹配一个简单的正则表达式。它的行为符合预期的 GNU bash,版本4.2.24(1) - release(x86_64-pc-linux-gnu)但不适用于 GNU bash,版本3.2.25(1) -release(x86_64-redhat-linux-gnu)
这是代码:
#!/bin/bash
line="[foo]"
[[ $line =~ ^\[.*\]$ ]] && echo "regex matched"
echo "value of \$? : " $?
echo "value of BASH_REMATCH : " $BASH_REMATCH
/bin/bash --version|grep "GNU bash"
这是输出 GNU bash,版本4.2.24(1)-release(x86_64-pc-linux-gnu)
正则表达式匹配
$的价值? :0
BASH_REMATCH的值:[foo]
GNU bash,版本4.2.24(1) - release(x86_64-pc-linux-gnu)
这是输出 GNU bash,版本3.2.25(1)-release(x86_64-redhat-linux-gnu)
$的价值? :1
BASH_REMATCH的值:
GNU bash,版本3.2.25(1)-release(x86_64-redhat-linux-gnu)
我在这里和其他地方看过很多关于 =〜中的oparator行为的帖子,我找不到任何有同样问题的人。我看到bash 3.2发生了重大变化,但据我所知它应该从3.2开始工作。
答案 0 :(得分:2)
看起来像某种形式的逃避问题。
这适用于此处(bash版本3.2.25(1)-release
):
line="[foo]"
bar="^\[.*\]$"
[[ $line =~ $bar ]] && echo "regex matched"
这似乎也有效:
[[ $line =~ ^\\[.*\\]$ ]] && echo "regex matched"