我想在我的Bash脚本中检查输入参数。由于可能有很多组合,所以我决定使用类似这样的结构:
if ( [[ "$2" = "(PARAM1|PARAM2|PARAM3)" && "$3" = "(PARAM11|PARAM22|PARAM33)" ]] )
我原本期望这行代码将检查哪个参数被指定了,(因为有可能出现参数组合,例如PARAM1 PARAM22
或者PARAM11 PARAM3
等)。
但实际上它并没有起到作用。我应该使用数组还是需要尝试其他语法?
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
,它运行良好 :) - Nikita Afanasev
=~
。 - Jason Hu