案例陈述贯穿始终?
在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