0

是否可以在 unix shell 脚本切换案例中使用逻辑 AND。如果是这样,怎么做?

switch $var in
    1 AND $var2 EQUALS 2)
        some code
4

2 回答 2

1

您可以使用:

case "$var1:$var2" in
(1:2) # $var1 = 1 && $var2 == 2
      ;;
...
esac

在这种情况下,我添加了冒号(一个任意的非数字),因此您可以合理地确定这些值与所述值一致。但是,如果有人达到var1="1:2"and 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),此技术可能很有用。

于 2012-11-03T18:12:57.640 回答
0

您需要为此使用if语句。

看到这个

“每个案例都是一个匹配模式的表达式。执行第一个匹配的命令列表中的命令。“|”符号用于分隔多个模式,“)”运算符终止一个模式列表。“

因此,对于每种情况,您都需要有模式,而不是要评估的表达式。

于 2012-11-03T13:26:41.620 回答