bash在使用fallthrough时是否具有case语句的'default'等效项?

问题描述 投票:0回答:1
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 switch-statement fall-through
1个回答
0
投票

来自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
© www.soinside.com 2019 - 2024. All rights reserved.