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\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\ncase "$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\nRun Code Online (Sandbox Code Playgroud)\n