多次命中的Bash案例$ 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
.
此脚本的结果是回声乳制品
我需要更改以上代码,以便回声: 日记 碳水化合物
是可能的吗?
解决方案
使用;;&
而不是世纪odicetagcode如果您想要此行为。
表示,跌倒行为将意味着您无条件地获得生成的。我建议在发射;;
之前设置匹配和检查它的旗帜。
SO:
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符合POSIX SH符合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