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)
为什么会这样?我没有正确安装它吗?
在 SO 上查看此答案。由于您使用的是 bash 3 的 3.00 版本,因此它可能会考虑您的问题。很快,从 3.2 版本开始,将字符串参数引用到[[命令的=~运算符会强制字符串匹配,因此 bash 4 的正确模式应该是:
$ [[ "20110228" =~ ^[0-9]{8}$ ]] && echo matches
matches
Run Code Online (Sandbox Code Playgroud)