我想创建一个包含两个表达式的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?
谢谢
答案 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
没有布尔常量; true
和false
只是字符串,没有直接的方法将它们视为布尔值。如果使用0和1的标准编码作为布尔值,则可以使用$((...))
:
a=1 # true
b=0 # false
case $(( a && b )) in
1) echo 'a && b == true' ;;
0) echo 'a && b == false' ;;
esac