【发布时间】:2012-11-03 13:24:19
【问题描述】:
是否可以在 unix shell 脚本切换案例中使用逻辑与。如果有,怎么做?
switch $var in
1 AND $var2 EQUALS 2)
some code
【问题讨论】:
-
在这种情况下使用
if。
标签: shell unix switch-statement logical-operators
是否可以在 unix shell 脚本切换案例中使用逻辑与。如果有,怎么做?
switch $var in
1 AND $var2 EQUALS 2)
some code
【问题讨论】:
if。
标签: shell unix switch-statement logical-operators
你可以使用:
case "$var1:$var2" in
(1:2) # $var1 = 1 && $var2 == 2
;;
...
esac
在这种情况下,我添加了冒号(一个任意的非数字),因此您可以合理地确定这些值与所述值一致。但是,如果有人达到了var1="1:2" 和var2="",那么测试会通过,但值不会达到要求。但是,如果您负责变量,这将是非常明智的。使用if 进行简单的值测试可能更简洁,但是如果您需要范围测试,这可能比等效的if 更简洁,而且不太清晰:
case "$var1:$var2" in
([1-3]:[4-9]) # $var1 in {1,2,3} && $var2 in {4,5,6,7,8,9}
;;
...
esac
case "$var1:$var2" in
(*amber*:*gold*) # $var1 contains 'amber' && $var2 contains 'gold'
;;
...
esac
bash 很可能具有处理后者的内置功能;较旧的贝壳没有。如果您需要移植到默认安装了 bash 的机器(可能是 AIX、HP-UX、Solaris),此技术可能会很有用。
【讨论】:
您需要为此使用if 语句。
见this。
"每个 case 都是一个匹配模式的表达式。 执行第一个匹配的 COMMAND-LIST。 “|”使用了符号 用于分隔多个模式,并且“)”运算符终止一个 模式列表。 "
因此,对于每种情况,您都需要有模式,而不是要评估的表达式。
【讨论】:
case;他们可能不像if 那样明智,但是……看我的回答。