programing

스위치 케이스와 폴스루요?

fastcode 2023. 4. 25. 23:09
반응형

스위치 케이스와 폴스루요?

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 입니다.

반응형