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
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top