案例陈述贯穿始终?

在stream行的命令式语言中,一旦case语句匹配,switch语句通常会“落空”到下一个级别。

例:

int a = 2; switch(a) { case 1: print "quick "; case 2: print "brown "; case 3: print "fox "; break; case 4: print "jumped "; } 

会打印“棕色狐狸”。

但是在bash中相同的代码

 A=2 case $A in 2) echo "QUICK" ;& 2) echo "BROWN" ;& 3) echo "FOX" ;& 4) echo "JUMPED" ;& esac 

只打印“棕色”

如何在bash“fall through”中将案例陈述作为第一个例子的剩余条件?

(编辑:Bash版本3.2.25,;( 从维基 )的语句导致语法错误)

运行:

test.sh:

 #!/bin/bash A=2 case $A in 1) echo "QUICK" ;& 2) echo "BROWN" ;& 3) echo "FOX" ;& esac 

得到:

./test.sh:第6行:意外标记附近的语法错误;' ./test.sh:
line 6:
;' ./test.sh:
line 6:
;' ./test.sh:
line 6:
&'

;&;;&运算符是在bash 4.0中引入的,所以如果你想使用一个五年前的bash版本,你将不得不重复代码,否则使用if

 if (( a == 1)); then echo quick; fi if (( a > 0 && a <= 2)); then echo brown; fi if (( a > 0 && a <= 3)); then echo fox; fi if (( a == 4)); then echo jumped; fi 

或者find其他的方式来达到实际的目标。

(请注意, 不要使用全部大写variables名 , 否则可能会覆盖特殊的shellvariables或环境variables。

尝试这个:

 case $VAR in normal) echo "This doesn't do fallthrough" ;; fallthrough) echo -n "This does " ;& somethingelse) echo "fall-through" ;; esac