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


83

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

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

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


请注意,由于周围缺少空格,此操作失败了=~
fedorqui'SO停止伤害

Answers:


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

1
如果我无法报价,当正则表达式包含空格时,我该如何处理?如果正则表达式是例如a +b它将报告语法错误...
Alderath

5
@Alderath:a\ \+b用于转义空格和加号。
blinry

8

您需要在运算符周围留空格=〜

i =“ test”
如果[[$ i =〜“ 200 [78]”]];
然后
  回声“确定”
其他
  回声“不好”
科幻

3
paxdiablo的答案是正确的,在此处添加空格无济于事(对于2008年,您现在也将获得“ not OK”,唯一匹配的字符串实际上是“ 200 [78]”)。
Marcel Stimberg 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.