如何在 bash 脚本中使用正则表达式?

我想使用正则表达式检查一个变量是否有有效的年份。阅读 Bash 手册,我知道我可以使用运算符 = ~

看下面的例子,我希望看到“不好”,但我看到“好”。我做错了什么?

i="test"
if [ $i=~"200[78]" ]
then
echo "OK"
else
echo "not OK"
fi
111687 次浏览

它在3.1和3.2之间变化:

这是自 bash-3.1发布以来向 bash-3.2添加的新特性的简要描述。

将字符串参数引用到[[ command 的 = ~ 操作符现在强制字符串匹配,与其他模式匹配操作符一样。

所以不要用引号:

i="test"
if [[ $i =~ 200[78] ]] ; then
echo "OK"
else
echo "not OK"
fi

在运算符周围需要空格 = ~

i="test"
if [[ $i =~ "200[78]" ]];
then
echo "OK"
else
echo "not OK"
fi