Bash 正则表达式匹配在 4.1 中不起作用

dog*_*ane 6 bash regular-expression

升级到Bash4,发现不匹配正则表达式:

$ echo $BASH_VERSION
4.1.2(1)-release

$ [[ "20110228" =~ "^[0-9]{8}$" ]] && echo matches
Run Code Online (Sandbox Code Playgroud)

但是 Bash 3.0 是:

$ echo $BASH_VERSION
3.00.16(1)-release

$ [[ "20110228" =~ "^[0-9]{8}$" ]] && echo matches
matches
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我没有正确安装它吗?

kar*_*s7e 7

在 SO 上查看此答案。由于您使用的是 bash 3 的 3.00 版本,因此它可能会考虑您的问题。很快,从 3.2 版本开始,将字符串参数引用到[[命令的=~运算符会强制字符串匹配,因此 bash 4 的正确模式应该是:

$ [[ "20110228" =~ ^[0-9]{8}$ ]] && echo matches
matches
Run Code Online (Sandbox Code Playgroud)