【问题标题】:How do I use regular expressions in bash scripts?如何在 bash 脚本中使用正则表达式?
【发布时间】:2010-09-23 05:20:14
【问题描述】:

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

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

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

【问题讨论】:

标签: regex bash conditional


【解决方案1】:

它在 3.1 和 3.2 之间发生了变化:

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

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

所以使用它不带引号:

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

【讨论】:

  • 如果我不能引用正则表达式包含空格的情况,我该如何处理?如果正则表达式是例如a +b会报语法错误...
  • @Alderath:使用a\ \+b 转义空格和加号。
【解决方案2】:

运算符周围需要空格=~

我=“测试” 如果 [[ $i =~ "200[78]" ]]; 然后 回声“确定” 别的 回声“不好” 菲

【讨论】:

  • paxdiablo 的回答是对的,在这里添加空格并没有帮助(您现在也得到 2008 年的“不正常”,唯一匹配的字符串字面上是“200[78]”)。
猜你喜欢
  • 2019-11-16
  • 1970-01-01
  • 2011-11-01
  • 2013-06-06
  • 2011-04-12
  • 2011-05-31
相关资源
最近更新 更多