Bashケースのドアをカスケードで配置できますか?

Bashケースのドアをカスケードで配置できますか?

私は次のことをしようとします:

case $level in
    3)
        echo "Level Three"

    2)
        echo "Level Two"

    1)
        echo "Level one"
        ;;
esac

$level = 3の場合は出力されます。

Level Three
Level Two
Level One

$level = 1 の場合、出力のみになります。

Level One

しかし、試してみるとsyntax error near unexpected token ')'含まれていないため、エラーが発生します;;

私が知っている他のすべての言語はそれを許可します。 bashでこれを行う方法はありますか? 「これが一致するように、次のケースに進みます」という意味のキーワードの一種?

ベストアンサー1

;&失敗したアクションを実行する代わりに、次のものを使用する必要があります;;

#! /bin/bash
foo() {
    case "$1" in
        3)
            echo "Level Three"
            ;&
        2)
            echo "Level Two"
            ;&
        1)
            echo "Level One"
            ;;
        a)
            echo "Level a"
            ;&
        b)
            echo "Level b"
            ;&
        c)
            echo "Level c"
            ;;
    esac
}
echo 3:
foo 3
echo 2:
foo 2
echo a:
foo a
3:
Level Three
Level Two
Level one
2:
Level Two
Level one
a:
Level a
Level b
Level c

より条件付き構造bash ドキュメントのセクション。

別の特別な表示は;;&次のとおりです。

シェルが次のセクションのパターンをテストし(存在する場合)、成功した一致時に関連するコマンドのリストを実行するようにします。

;;常に最終的であり、パターンをテストしません。

#! /bin/bash

foo() {
    case "$1" in
        *3*)
            echo "Level Three"
            ;;&
        *2*)
            echo "Level Two"
            ;;&
        *1*)
            echo "Level One"
            ;;&
    esac
}

echo 12:
foo 12
echo 13:
foo 13
echo 23:
foo 23
12:
Level Two
Level One
13:
Level Three
Level One
23:
Level Three
Level Two

おすすめ記事