case "$action" in
a|b)
echo for a or b
;;&
b|c)
echo for c or b
;;&
*)
echo for everything ELSE
;;&
esac
因此,如您所见,我使用的是;&
而不是;;
,因此,如果action=b
会触发前两种情况。但是,这样做的缺点是*)
不再“意味着”“其他”,而是匹配“所有”。因此b
也会触发最后一个。
PowerShell可以执行我想要的操作,因为它具有专用的default
关键字,Bash是否具有类似的功能?关于[!(a|b|c)])
之类的详尽解决方法呢?
case 5 in 4) echo bob; ;;& esac || echo DEFAULT
这样的操作很方便,但是case
似乎没有返回任何代码。
来自bash manual:
如果使用';;'运算符,则在第一个模式匹配之后将不再尝试后续匹配。使用“;&”代替“ ;;”会导致执行继续执行与下一个子句(如果有)关联的命令列表。使用';;&'代替';;'使外壳测试下一个子句中的模式(如果有),并在成功匹配后执行任何关联的命令列表,继续执行case语句,就像模式列表一样没有匹配。
我相信您可以获得的最接近的是:
case "$action" in
a|b)
echo for a or b
;;&
b|c)
echo for c or b
;;&
*)
echo for everything ELSE
esac