Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据多个值检查bash变量_Bash_Shell_Variables_Scripting - Fatal编程技术网

根据多个值检查bash变量

根据多个值检查bash变量,bash,shell,variables,scripting,Bash,Shell,Variables,Scripting,我想检查Bash脚本中的输入参数。可以有很多组合,所以我决定使用这样的结构: if ( [[ "$2" = "(PARAM1|PARAM2|PARAM3)" && "$3" = "(PARAM11|PARAM22|PARAM33)" ]] ) if [[ $2 =~ ^(foo|bar)$ ]]; then ... fi 我希望此行将检查指定的参数(可以有输入组合,如PARAM1 PARAM22或PARAM11 PARAM3等) 但它不起作用。我应该使用数组还是只需要

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

if  ( [[ "$2" = "(PARAM1|PARAM2|PARAM3)" && "$3" = "(PARAM11|PARAM22|PARAM33)" ]] )
if [[ $2 =~ ^(foo|bar)$ ]]; then
   ...
fi
我希望此行将检查指定的参数(可以有输入组合,如
PARAM1 PARAM22
PARAM11 PARAM3
等)


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

您可能需要重新阅读bash手册页中关于“复合命令”和“条件表达式”(每个手册页的大写字母)的部分。您的问题将条件放入子shell中,这是不必要的

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

if  ( [[ "$2" = "(PARAM1|PARAM2|PARAM3)" && "$3" = "(PARAM11|PARAM22|PARAM33)" ]] )
if [[ $2 =~ ^(foo|bar)$ ]]; then
   ...
fi
或:

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

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

您处理参数的确切方式取决于您实际需要对其执行的操作,而您在问题中没有分享这些操作。如果您更新您的问题以包含更多细节,我很乐意更新此答案。:)

你免费提供了一个子shell,你应该在这里使用正则表达式匹配
=~
。非常感谢你的帮助,我尝试在脚本中使用
case
,效果很好:)太好了,我很高兴能帮上忙。请随意点击我答案旁边的复选标记以关闭问题。