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
这可以轻松扩展到可变数量的字符串。但请记住,您必须找到一个字符(此处:
),甚至是不可能出现在您正在测试的字符串中的字符序列。