Linux 的“case”语句可以有“or”概念吗?

Linux 的“case”语句可以有“or”概念吗?

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

这将打印1or2为第一个$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

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

相关内容