在bash if语句中混合使用正则表达式和其他条件表达式

时间:2010-03-16 09:17:41

标签: regex bash if-statement

我现在已经有一段时间无法解决这个问题了。当我阅读手册和教程时,我变得更加困惑。我想要一个带有以下逻辑的if语句:

if [ -n $drupal_version ] && [[ "$drupal_version" =~ DRUPAL-[6-9]-[1-9][1-9] ]]; then

但我无法让它正常工作。

当使用“bash -x ...”脚本构造评估脚本时,工作正常,但是当作为常规脚本运行时,我的表达式不会被评估(尽管应该满足上述条件,否则运行else部分)

你能提供任何帮助吗?

2 个答案:

答案 0 :(得分:0)

你可以使用case/esac,没有正则表达式。可用于bash< 3.2

if [ -n "$drupal_version" ] ;then
  case "$drupal_version" in
   DRUPAL-[6-9]-[1-9][1-9]) 
      echo "found"
      ;;
   *) 
      echo "version not correct"
      ;;
  esac
fi

但是,如果你想要正则表达式,请注意它是=~而不是=

[[ $drupal_version =~ DRUPAL-[6-9]-[1-9][1-9] ]] && echo "found"

答案 1 :(得分:0)

谢谢大家的回复。双括号]]是一个特定于bash的构造,它反过来要求脚本的第一行指向#!/ bin / bash,而不是我所做的#!/ bin / sh。改变了那条线,一切正常。