升级到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