bash – 案例陈述?

在流行的命令式语言中,一旦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变量或环境变量的风险。)

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...