根据多个值检查bash变量
我想检查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等) 但它不起作用。我应该使用数组还是只需要
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
,效果很好:)太好了,我很高兴能帮上忙。请随意点击我答案旁边的复选标记以关闭问题。