문제

shopt -s extglob 
CONDITION1="@(*cheese*|*milk*|*cream*)"
CONDITION2="@(*potato*|*rice*|*pasta*)"

myvar1="pasta with cheese"

case ${myvar1} in
${CONDITION1} )
        echo DAIRY
        ;;
${CONDITION2} )
        echo CARBS
        ;;
* )
        echo HUNGRY
        ;;
esac
.

이 스크립트의 결과는 에코 유제품

위의 코드를 변경해야합니다. 일기 탄수화물

는 가능합니다.

도움이 되었습니까?

해결책

이 동작을 원하시면 ;;& 대신 ;;를 사용하십시오.

, 폴 - 스루 행동이 무조건 HUNGRY를 얻는 것을 의미합니다.일치 시점에 플래그를 설정하고 HUNGRY를 방출하기 전에 확인하는 것을 제안합니다.

그래서 :

myvar1="pasta with cheese"; matched=0
case $myvar1 in
  *cheese*|*milk*|*cream*)
     echo DAIRY; matched=1 ;;&
  *potato*|*rick*|*pasta*)
     echo CARBS; matched=1 ;;&
esac
(( matched )) || echo HUNGRY
.

여러 대의 사례 문장 (그리고 다시 extglobs를 사용하지 않음)으로 분할하여 POSIX SH를 준수하는 것이 쉽습니다.

myvar1="pasta with cheese"; unset matched
case $myvar1 in *cheese*|*milk*|*cream*) echo DAIRY; matched=1 ;; esac
case $myvar1 in *potato*|*rick*|*pasta*) echo CARBS; matched=1 ;; esac
[ "$matched" ] || echo HUNGRY
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top