是否可以在unix shell脚本切换案例中使用逻辑AND。如果是这样,怎么样?
switch $var in
1 AND $var2 EQUALS 2)
some code
答案 0 :(得分:0)
您需要使用if
语句。
见this。
“每个案例都是一个匹配模式的表达式 执行第一个匹配的COMMAND-LIST。 “|”使用符号 用于分隔多个模式,“)”运算符终止a 模式列表。 “
因此,对于每种情况,您都需要拥有模式,而不是要评估的表达式。
答案 1 :(得分:0)
您可以使用:
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),则此技术可能很有用。