[英]Bash case $var in multiple hits
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
该脚本的结果是echo DAIRY
我需要更改上面的代码,以使其呼应:DIARY CARBS
那可能吗?
使用;;&
代替;;
如果您想要这种行为。
话虽如此,跌倒行为将意味着您无条件地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
就是说,通过拆分为多个case语句(并且再次不使用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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.