我正在尝试在 bash 脚本中匹配一个简单的正则表达式。它的行为与 GNU bash 版本 4.2.24(1)-release (x86_64-pc-linux-gnu) 的预期一致,但与 GNU bash 版本 3.2.25(1) 的行为不同-发布(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) 的输出
regex matched
value of $? : 0
value of BASH_REMATCH : [foo]
GNU bash, version 4.2.24(1)-release (x86_64-pc-linux-gnu)
这里是 GNU bash,版本 3.2.25(1)-release (x86_64-redhat-linux-gnu) 的输出
value of $? : 1
value of BASH_REMATCH :
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
我在这里和其他地方读了很多关于 =~ 中操作者行为的帖子,但我找不到任何有同样问题的人。我看到 bash 3.2 中有重大变化,但据我所知它应该从 3.2 开始工作。
最佳答案
看起来像是某种形式的逃避问题。
这在这里有效(bash版本3.2.25(1)-release
):
line="[foo]"
bar="^\[.*\]$"
[[ $line =~ $bar ]] && echo "regex matched"
这似乎也有效:
[[ $line =~ ^\\[.*\\]$ ]] && echo "regex matched"
关于regex - 使用 =~ 时 bash 3.2 正则表达式模式不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15253792/