在流行的命令式语言中,一旦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
只打印“BROWN”
如何使bash中的case语句“fall through”到剩余的条件,如第一个例子?
(编辑:Bash版本3.2.25,;&语句(from wiki)导致语法错误)
运行:
test.sh:
#!/bin/bash A=2 case $A in 1) echo "QUICK" ;& 2) echo "BROWN" ;& 3) echo "FOX" ;& esac
给予:
./test.sh: line 6: Syntax error near unexpected token
;' ./test.sh:
;&’
line 6:
;&和;运算符在bash 4.0中引入,所以如果你想坚持使用一个五年的bash版本,你要么重复代码,要么使用ifs。
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
或者找到一些其他方式来实现实际目标。
(在边注,don’t use all uppercase variable names.你有覆盖特殊的shell变量或环境变量的风险。)