根据多个值检查 bash 变量
Checking a bash variable against multiple values
我想检查 Bash 脚本中的输入参数。可以有很多组合,所以我决定使用这样的构造:
if ( [[ "" = "(PARAM1|PARAM2|PARAM3)" && "" = "(PARAM11|PARAM22|PARAM33)" ]] )
我预计这一行将检查指定了哪个参数(可以有输入组合,如 PARAM1 PARAM22
或 PARAM11 PARAM3
等)。
但是没用。我应该使用数组还是只需要尝试其他语法?
您可能需要重新阅读 bash 手册页中有关 "Compound commands" 和 "CONDITIONAL EXPRESSIONS" 的部分(每个手册页都有上限)。您的问题将条件放在子外壳中,这是不必要的。,
如果要将参数(</code>、<code>
等)与正则表达式进行匹配,可以使用如下格式:
if [[ =~ ^(foo|bar)$ ]]; then
...
fi
或:
if [[ =~ ^(foo|bar)$ ]] && [[ =~ ^(baz|flarn)$ ]]; then
...
fi
也就是说,正则表达式 在这里并不是真正需要的。正则表达式比简单的模式匹配使用更多 CPU。我可能会使用 case
语句来处理这个问题:
case "" in
foo|bar)
case "" in
glurb|splat)
# do something
;;
esac
;;
baz)
# do something else
;;
esac
你处理参数的确切方式取决于你实际需要用它们做什么,你没有在你的问题中分享。如果您更新问题以包含更多详细信息,我很乐意更新此答案。 :)
我想检查 Bash 脚本中的输入参数。可以有很多组合,所以我决定使用这样的构造:
if ( [[ "" = "(PARAM1|PARAM2|PARAM3)" && "" = "(PARAM11|PARAM22|PARAM33)" ]] )
我预计这一行将检查指定了哪个参数(可以有输入组合,如 PARAM1 PARAM22
或 PARAM11 PARAM3
等)。
但是没用。我应该使用数组还是只需要尝试其他语法?
您可能需要重新阅读 bash 手册页中有关 "Compound commands" 和 "CONDITIONAL EXPRESSIONS" 的部分(每个手册页都有上限)。您的问题将条件放在子外壳中,这是不必要的。,
如果要将参数(</code>、<code>
等)与正则表达式进行匹配,可以使用如下格式:
if [[ =~ ^(foo|bar)$ ]]; then
...
fi
或:
if [[ =~ ^(foo|bar)$ ]] && [[ =~ ^(baz|flarn)$ ]]; then
...
fi
也就是说,正则表达式 在这里并不是真正需要的。正则表达式比简单的模式匹配使用更多 CPU。我可能会使用 case
语句来处理这个问题:
case "" in
foo|bar)
case "" in
glurb|splat)
# do something
;;
esac
;;
baz)
# do something else
;;
esac
你处理参数的确切方式取决于你实际需要用它们做什么,你没有在你的问题中分享。如果您更新问题以包含更多详细信息,我很乐意更新此答案。 :)