83

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

查看下面的示例,我希望看到“不正常”,但我看到“正常”。我究竟做错了什么?

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

2 回答 2

116

它在 3.1 和 3.2 之间进行了更改:

这是对自 bash-3.1 发布以来添加到 bash-3.2 的新功能的简要描述。

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

因此,使用它不带引号:

i="test"
if [[ $i =~ 200[78] ]] ; then
    echo "OK"
else
    echo "not OK"
fi
于 2008-11-20T10:45:17.070 回答
8

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

我=“测试”
如果 [[ $i =~ "200[78]" ]];
然后
  回声“确定”
别的
  回声“不好”
菲
于 2010-02-24T00:54:58.997 回答