[英]Does bash have a `default`-equivalent for the case statement when using fallthrough?
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 5 in 4) echo bob; ;;& esac || echo DEFAULT
操作会很方便case 5 in 4) echo bob; ;;& esac || echo DEFAULT
case 5 in 4) echo bob; ;;& esac || echo DEFAULT
case 5 in 4) echo bob; ;;& esac || echo DEFAULT
但case
似乎没有返回任何代码。
从bash 手册:
如果';;' 使用运算符,在第一个模式匹配后不会尝试后续匹配。 使用 ';&' 代替 ';;' 使执行继续执行与下一个子句关联的命令列表(如果有)。 使用 ';;&' 代替 ';;' 使外壳程序测试下一个子句中的模式(如果有),并在成功匹配时执行任何关联的命令列表,继续执行 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.