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 DEFAULTcase似乎没有返回任何代码的事情会很方便。

4

1 回答 1

4

来自bash 手册

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

也许这样的想法:

case "$action" in
a|b)
    echo for a or b
    ;;&
b|c)
    echo for c or b
    ;;&
a|b|c) ;;
*)
    echo for everything ELSE
esac
于 2019-12-10T00:51:17.960 回答