如何让 switch 执行 2 个 case
2013-07-17
3766
如何使开关执行2个情况?
我尝试了以下代码,但仅执行第一个情况
704282748
3个回答
bash 中的
case
语句仅针对第一个匹配执行
COMMAND-LIST
中的命令。
但是,在
bash 版本 4
或更高版本中引入了
;&
终止符。
;;&
运算符类似于
;;
,只是 case 语句在执行关联列表后不会终止 - Bash 只是继续测试下一个模式,就好像前一个模式不匹配一样。使用这些终止符,可以将 case 语句配置为针对所有模式进行测试,或者在块之间共享代码等。
参考: 摘自 http://wiki.bash-hackers.org/syntax/ccmd/case
因此,如果您拥有
bash v 4 或更高版本
,这将提供您想要的结果:
#!/bin/sh
action="titi"
case "$action" in
toto|titi)
echo "1_$action"
;;&
tata|titi)
echo "2_$action"
;;
esac
jaypal singh
2013-07-17
也许可以考虑将
titi
作为在没有模式匹配时执行的默认值
#!/bin/sh
action="titi"
case "$action" in
toto)
echo "1_$action"
;;
tata)
echo "2_$action"
;;
*)
echo "1_$action"
echo "2_$action"
esac
mirkobrankovic
2013-07-17
根据
@josay
的评论,这称为“fall through”,可以使用 bash 脚本在第一种情况下使用
;;&
而不是
;;
来实现。但“fall through”仅在 bash 版本为 4.0 或更高版本时才有效
接下来,源代码已更新“fall through”
#!/bin/sh
action="$1"
case "$action" in
toto|titi)
echo "1_$action"
;;&
tata|titi)
echo "2_$action"
;;
esac
MOHAMED
2013-07-17