Nik*_*sev 3 variables bash shell scripting
我想检查 Bash 脚本中的输入参数。可以有很多组合,所以我决定使用这样的结构:
if ( [[ "$2" = "(PARAM1|PARAM2|PARAM3)" && "$3" = "(PARAM11|PARAM22|PARAM33)" ]] )
Run Code Online (Sandbox Code Playgroud)
我预计这一行将检查指定了哪个参数(可以有输入组合,如PARAM1 PARAM22或PARAM11 PARAM3等)。
但这不起作用。我应该使用数组还是只需要尝试其他语法?
您可能需要重新阅读 bash 手册页中有关“复合命令”和“条件表达式”的部分(每个手册页的上限)。您的问题将条件放在子外壳内,这是不必要的。,
如果您想将参数($2、$3等)与正则表达式进行匹配,您可以使用如下格式:
if [[ $2 =~ ^(foo|bar)$ ]]; then
...
fi
Run Code Online (Sandbox Code Playgroud)
或者:
if [[ $2 =~ ^(foo|bar)$ ]] && [[ $3 =~ ^(baz|flarn)$ ]]; then
...
fi
Run Code Online (Sandbox Code Playgroud)
也就是说,这里并不真正需要正则表达式。正则表达式比简单的模式匹配使用更多的 CPU。我可以使用case语句来处理这个问题:
case "$2" in
foo|bar)
case "$3" in
glurb|splat)
# do something
;;
esac
;;
baz)
# do something else
;;
esac
Run Code Online (Sandbox Code Playgroud)
处理参数的确切方式取决于您实际需要对它们执行的操作,而您在问题中尚未共享这些参数。如果您更新问题以包含更多详细信息,我很乐意更新此答案。:)