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

时间:2008-11-20 10:21:23

标签: regex bash conditional

我想使用正则表达式检查变量是否具有有效年份。阅读bash manual我明白我可以使用operator =〜

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

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

2 个答案:

答案 0 :(得分:115)

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

  

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

     

引用[[command's =〜运算符]的字符串参数现在强制字符串匹配,就像其他模式匹配运算符一样。

因此在没有引号的情况下使用它:

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

答案 1 :(得分:8)

你需要在operator =〜

周围留出空格
i="test"
if [[ $i =~ "200[78]" ]];
then
  echo "OK"
else
  echo "not OK"
fi