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

1これにより、orが2最初の一致$xとして印刷されます$y。もちろん、2つが一致する場合はどうするかを決定するのはユーザーの役割です。

答え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

これはさまざまな数の文字列に簡単に拡張できます。ただし、:テスト中の文字列に現れる可能性のない文字(ここ)または一連の文字を見つける必要があることに注意してください。

関連情報