【问题标题】:Checking a bash variable against multiple values针对多个值检查 bash 变量
【发布时间】:2015-05-20 01:36:16
【问题描述】:

我想检查我的 Bash 脚本中的输入参数。可以有很多组合,所以我决定使用这样的结构:

if  ( [[ "$2" = "(PARAM1|PARAM2|PARAM3)" && "$3" = "(PARAM11|PARAM22|PARAM33)" ]] )

我希望这一行会检查指定了哪个参数(可以有PARAM1 PARAM22PARAM11 PARAM3等输入组合)。

但它不起作用。我应该使用数组还是只需要尝试其他语法?

【问题讨论】:

  • 你分叉了一个子shell,你应该在这里使用正则表达式匹配=~

标签: bash shell variables scripting


【解决方案1】:

您可能需要重新阅读 bash 手册页中有关“复合命令”和“条件表达式”的部分(每个手册页的上限)。您的问题将条件放在子外壳中,这是不必要的。,

如果您想将参数($2$3 等)与正则表达式匹配,您可以使用如下格式:

if [[ $2 =~ ^(foo|bar)$ ]]; then
   ...
fi

或者:

if [[ $2 =~ ^(foo|bar)$ ]] && [[ $3 =~ ^(baz|flarn)$ ]]; then
   ...
fi

也就是说,这里并不需要正则表达式。正则表达式比简单的模式匹配使用更多的 CPU。我可以使用case 语句来处理这个问题:

case "$2" in
  foo|bar)
    case "$3" in
      glurb|splat)
      # do something
      ;;
    esac
    ;;
  baz)
    # do something else
    ;;
esac

您处理参数的确切方式取决于您实际需要对它们做什么,您没有在问题中分享。如果您更新您的问题以包含更多详细信息,我很乐意更新此答案。 :)

【讨论】:

  • 非常感谢您的帮助,我已尝试在我的脚本中使用 case,它工作正常 :)
  • 太好了,我很高兴能帮上忙。请随时单击我的答案旁边的复选标记以关闭问题。
猜你喜欢
  • 2013-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-20
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多