Bash Case $ VAR 여러 히트에서
-
20-12-2019 - |
문제
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
. 제휴하지 않습니다 StackOverflow