我正在尝试做这样的事情:
case $level in
3)
echo "Level Three"
2)
echo "Level Two"
1)
echo "Level one"
;;
esac
如果 $level = 3,它将输出
Level Three
Level Two
Level One
而如果$level = 1,它只会输出
Level One
但当我尝试时,我收到错误,syntax error near unexpected token ')'
因为我没有包含;;
.
我所知道的所有其他语言都允许这样做,有没有办法在 bash 中做到这一点?某种关键字的意思是“现在继续执行下一个案例,就好像它匹配一样”?
答案1
您需要使用;&
而不是;;
获得失败行为:
#! /bin/bash
foo() {
case "$1" in
3)
echo "Level Three"
;&
2)
echo "Level Two"
;&
1)
echo "Level One"
;;
a)
echo "Level a"
;&
b)
echo "Level b"
;&
c)
echo "Level c"
;;
esac
}
echo 3:
foo 3
echo 2:
foo 2
echo a:
foo a
3:
Level Three
Level Two
Level one
2:
Level Two
Level one
a:
Level a
Level b
Level c
请参阅条件结构bash 文档的部分。
另一个特殊标记是;;&
,其中:
使 shell 测试下一个子句中的模式(如果有),并在成功匹配时执行任何关联的命令列表。
;;
始终是最终的,不再测试进一步的模式。
#! /bin/bash
foo() {
case "$1" in
*3*)
echo "Level Three"
;;&
*2*)
echo "Level Two"
;;&
*1*)
echo "Level One"
;;&
esac
}
echo 12:
foo 12
echo 13:
foo 13
echo 23:
foo 23
12:
Level Two
Level One
13:
Level Three
Level One
23:
Level Three
Level Two