반응형
스위치 케이스와 폴스루요?
Bash(이상적으로 대소문자를 구분하지 않음)에서 오류 발생 대소문자가 포함된 올바른 스위치 문 구문을 찾고 있습니다.PHP에서는 다음과 같이 프로그래밍합니다.
switch($c) {
case 1:
do_this();
break;
case 2:
case 3:
do_what_you_are_supposed_to_do();
break;
default:
do_nothing();
}
Bash에서도 같은 걸 원해요.
case "$C" in
"1")
do_this()
;;
"2")
"3")
do_what_you_are_supposed_to_do()
;;
*)
do_nothing();
;;
esac
이 기능은 작동하지 않습니다.do_what_you_are_supposed_to_do()$C가 2 또는 3일 때 발생해야 합니다.
세로 막대를 사용합니다(|)는 "또는"에 해당합니다.
case "$C" in
"1")
do_this()
;;
"2" | "3")
do_what_you_are_supposed_to_do()
;;
*)
do_nothing()
;;
esac
최근.bash버전을 사용하여 폴스루를 허용합니다.;&대신해서;;: 또한 다음을 사용하여 사례 확인을 재개할 수 있습니다.;;&거기.
for n in 4 14 24 34
do
echo -n "$n = "
case "$n" in
3? )
echo -n thirty-
;;& #resume (to find ?4 later )
"24" )
echo -n twenty-
;& #fallthru
"4" | [13]4)
echo -n four
;;& # resume ( to find teen where needed )
"14" )
echo -n teen
esac
echo
done
샘플 출력입니다.
4 = four
14 = fourteen
24 = twenty-four
34 = thirty-four
- 사용하지 마십시오.
()bash에서 함수 이름 뒤에 있습니다(단, 정의할 필요가 없는 경우). - 사용하다
[23]일치할 경우에 대비해서2아니면요?3 - 정적 문자열 대소문자는 다음과 같이 묶어야 합니다.
''대신해서요""
에 동봉되어 있습니다.""인터프리터는 일치하기 전에 값에서 가능한 변수를 확장하려고 합니다.
case "$C" in
'1')
do_this
;;
[23])
do_what_you_are_supposed_to_do
;;
*)
do_nothing
;;
esac
대소문자를 구분하지 않는 일치의 경우 문자 클래스를 사용할 수 있습니다(예:[23]):
case "$C" in
# will match C='Abra' and C='abra'
[Aa]'bra')
do_mysterious_things
;;
# will match all letter cases at any char like `abra`, `ABRA` or `AbRa`
[Aa][Bb][Rr][Aa])
do_wild_mysterious_things
;;
esac
그렇지만abra첫 번째 사건과 일치할 것이기 때문에 아무 일도 일어나지 않았습니다
필요한 경우 생략할 수 있습니다.;;다음 경우에도 일치 테스트를 계속하는 첫 번째 사례입니다.(;;로 뛰어오릅니다.esac)
다음을 시도해 보십시오.
case $VAR in
normal)
echo "This doesn't do fallthrough"
;;
special)
echo -n "This does "
;&
fallthrough)
echo "fall-through"
;;
esac
값이 정수인 경우 다음을 사용할 수 있습니다.[2-3]또는 다음을 사용할 수 있습니다.[5,7,8]연속되지 않은 값의 경우입니다.
#!/bin/bash
while [ $# -gt 0 ];
do
case $1 in
1)
echo "one"
;;
[2-3])
echo "two or three"
;;
[4-6])
echo "four to six"
;;
[7,9])
echo "seven or nine"
;;
*)
echo "others"
;;
esac
shift
done
값이 문자열이면 다음을 사용할 수 있습니다.|.
#!/bin/bash
while [ $# -gt 0 ];
do
case $1 in
"one")
echo "one"
;;
"two" | "three")
echo "two or three"
;;
*)
echo "others"
;;
esac
shift
done
언급URL : https://stackoverflow.com/questions/5562253/switch-case-with-fallthrough 입니다.
반응형
'programing' 카테고리의 다른 글
| angular2 제출 버튼을 누르지 않고 enter를 눌러 양식을 제출합니다. (0) | 2023.04.25 |
|---|---|
| 한 디렉터리에서 기존 디렉터리로 파일을 복사합니다. (0) | 2023.04.25 |
| 내 Windows 응용 프로그램 아이콘의 아이콘 크기를 선택하십시오. (0) | 2023.04.25 |
| 이클립스는 다음과 같습니다.전체 작업 공간을 새로 고치려면 어떻게 해야 합니까?F5는 그렇지 않습니다. (0) | 2023.04.25 |
| DLL 함수를 표시하는 방법 (0) | 2023.04.20 |