폴스 루로 케이스 전환?
Bash에서 대소 문자가없는 switch 문의 올바른 구문을 찾고 있습니다 (이상적으로 대소 문자를 구분하지 않음). 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" | ?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
- 정적 문자열의 경우는로 묶어야합니다
''
대신""
If enclosed in ""
, the interpreter (needlessly) tries to expand possible variables in the value before matching.
case "$C" in
'1')
do_this
;;
[23])
do_what_you_are_supposed_to_do
;;
*)
do_nothing
;;
esac
For case insensitive matching, you can use character classes (like [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
But abra
didn't hit anytime because it will be matched by the first case.
If needed, you can omit ;;
in the first case to continue testing for matches in following cases too. (;;
jumps to esac
)
Try this:
case $VAR in
normal)
echo "This doesn't do fallthrough"
;;
special)
echo -n "This does "
;&
fallthrough)
echo "fall-through"
;;
esac
If the values are integer then you can use [2-3]
or you can use [5,7,8]
for non continuous values.
#!/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
If the values are string then you can use |
.
#!/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' 카테고리의 다른 글
jQuery를 사용하여 두 번째 자식 얻기 (0) | 2020.05.24 |
---|---|
메인 스크롤바를 항상 보이게 만들기 (0) | 2020.05.24 |
자식 분기에서 수정 된 모든 파일을 가져옵니다 (0) | 2020.05.24 |
힘내 푸시 오류 : 이전 연결을 해제 할 수 없습니다 (권한 거부). (0) | 2020.05.24 |
한 서버에서 다른 서버로 redis 데이터베이스를 어떻게 이동합니까? (0) | 2020.05.24 |