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

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

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

$ echo $BASH_VERSION
4.1.2(1)-release

$ [[ "20110228" =~ "^[0-9]{8}$" ]] && echo matches

但 Bash 3.0 是:

$ echo $BASH_VERSION
3.00.16(1)-release

$ [[ "20110228" =~ "^[0-9]{8}$" ]] && echo matches
matches

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

答案1

检查这个回答就这样。由于您使用的是 bash 3 的 3.00 版本,因此它可能会考虑您的问题。不久,从 3.2 版本开始,将字符串参数引用到[[命令的=~运算符会强制字符串匹配,因此 bash 4 的正确模式应该是:

$ [[ "20110228" =~ ^[0-9]{8}$ ]] && echo matches
matches

相关内容