![Linux 的“case”语句可以有“or”概念吗?](https://linux22.com/image/113400/Linux%20%E7%9A%84%E2%80%9Ccase%E2%80%9D%E8%AF%AD%E5%8F%A5%E5%8F%AF%E4%BB%A5%E6%9C%89%E2%80%9Cor%E2%80%9D%E6%A6%82%E5%BF%B5%E5%90%97%EF%BC%9F.png)
Linux可以使用案件就像许多语言一样,所以:
case ${x} in
one)
echo "1"
;;
two)
echo "2"
;;
esac
你可以对其中一个做同样的事情吗$x或者$y尽管?那么,想象一下:
case ( ${x} or ${y} ) in
one)
echo "1"
;;
two)
echo "2"
;;
esac
这意味着如果$x或者$y包含一或者二然后1或者2分别打印。
答案1
不,但您可以循环遍历值和大小写:
for v in "$x" "$y"; do
case "$v" in
one) echo "1"; break ;;
two) echo "2"; break ;;
esac
done
这将打印1
or2
为第一个$x
匹配$y
项。当然,如果两者匹配该怎么办,由您决定。
答案2
如果您知道可能的值$x
和$y
将会有什么,您可以构建字符串,例如"$x$y"
并查找全局模式,例如:
case $x$y in
*one*) echo "1" ;;
*two*) echo "2" ;;
esac
答案3
如果某个字符不能出现在任何变量值中,则可以使用该字符作为分隔符。例如,假设您已确定 x 的值和 y 的值都不能包含冒号
case ":${x}:${y}:" in
*:one:*)
echo "1"
;;
*:two:*)
echo "2"
;;
esac
这可以轻松扩展到可变数量的字符串。但请记住,您必须找到一个字符(此处:
),甚至是不可能出现在您正在测试的字符串中的字符序列。