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

관련 정보