나는 다음과 같은 일을하려고합니다 :
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