使用 Fallthrough 时,bash 是否有与 case 语句等效的“default”?

Has*_*own 9 bash switch-statement fall-through

case "$action" in
a|b)
    echo for a or b
;;&
b|c)
    echo for c or b
;;&
*)
    echo for everything ELSE
;;&
esac
Run Code Online (Sandbox Code Playgroud)

因此,正如您所看到的,我使用的;;&是而不是;;ifaction=b它将触发前两种情况。
然而,这样做的一个缺点是*)不再“意味着”“其他一切”,而是匹配“一切”;因此b也会触发最后一个。

PowerShell能够做我想做的事情,因为它有一个专用的default关键字,Bash有类似的东西吗?
诸如详尽的解决方法之类的怎么[!(a|b|c)])样?

做类似的事情会很方便case 5 in 4) echo bob; ;;& esac || echo DEFAULT,但case似乎不会返回任何代码。

Kam*_*Cuk 10

来自bash 手册

\n\n
\n

如果使用 \xe2\x80\x98;;\xe2\x80\x99 运算符,则在第一个模式匹配之后不会尝试后续匹配。使用 \xe2\x80\x98;&\xe2\x80\x99 代替 \xe2\x80\x98;;\xe2\x80\x99 会导致继续执行与下一个子句(如果有)关联的命令列表。使用 \xe2\x80\x98;;&\xe2\x80\x99 代替 \xe2\x80\x98;;\xe2\x80\x99 会导致 shell 测试下一个子句中的模式(如果有)并执行成功匹配时任何关联的命令列表,继续执行 case 语句,就像模式列表不匹配一样。

\n
\n\n

也许这样的想法:

\n\n
case "$action" in\na|b)\n    echo for a or b\n    ;;&\nb|c)\n    echo for c or b\n    ;;&\na|b|c) ;;\n*)\n    echo for everything ELSE\nesac\n
Run Code Online (Sandbox Code Playgroud)\n