两个变量的bash shell脚本case语句

时间:2016-09-01 07:02:54

标签: bash shell case

我想创建一个包含两个表达式的case语句,我的想象是这样的:

a=true
b=false 

case [ "$a" || "$b"]  in  #<-- how can I do this with a case statement ?

true)echo "a & b are true" ;;
false)echo "a or b are not true" ;;

esac

是否可以使用case而不是if?

谢谢

2 个答案:

答案 0 :(得分:3)

这是一个例子,但它是关于字符串的,而不是真正的逻辑表达式:

$ cat > foo.sh
a=true
b=false
case $a$b in        # "catenate" a and b, two strings
    *false*)        # if there is substring false (ie. truefalse, falsetrue or falsefalse) in there
        echo false  # it's false
        ;;
    *)
        echo true   # otherwise it must be true
        ;;
esac

$ bash foo.sh
false

答案 1 :(得分:2)

bash没有布尔常量; truefalse只是字符串,没有直接的方法将它们视为布尔值。如果使用0和1的标准编码作为布尔值,则可以使用$((...))

a=1  # true
b=0  # false
case $(( a && b )) in
  1) echo 'a && b == true' ;;
  0) echo 'a && b == false' ;;
esac