41. case 新终止符 ;& 和 ;;&
正如我们所知,;;
用作 case 语句的模式块中的最后一个语句,并且 bash 在遇到;;
后不会尝试测试任何进一步的模式匹配。
(即执行;;
后终止 case 语句)。
您还可以使用;&
或;;&
代替双分号 (;;
)。
下表解释了三种大小写终止符。
Terminator | Description |
---|---|
;; |
执行当前模式块中的语句后,bash 终止 case 语句并退出。 |
;& |
执行完当前模式块中的语句后,bash 继续跳转到下一个模式块中的语句并执行它们(不测试下一个模式块中的模式条件),然后根据下一个模式块的终止符来决定是否继续执行。 |
;;& |
执行当前模式块中的语句后,bash 继续执行下一个模式块并测试其余的模式条件; 如果模式匹配,bash 就会执行关联模式块中的语句。 |
使用 ;;
的案例
下面的例子中,其他情况都被跳过; 仅执行 CA 案例
$ cat case3.sh
stateabbr=${1}
case $stateabbr in
NY )
echo "NY is New York"
;;
CA )
echo "CA is California"
;;
NV )
echo "NV is Nevada"
;;
* )
echo "Unknown State Name"
;;
esac
$ ./case3.sh CA
CA is California
使用 ;&
的案例
在下面的示例中,由于;&
用于终止 CA 模式块,因此也会打印 NV。 但是由于 ;;
用于终止 NV 块,跳过 NV 之后的其余情况。
$ cat case4.sh
stateabbr=${1}
case $stateabbr in
NY )
echo "NY is New York"
;&
CA )
echo "CA is California"
;&
NV )
echo "NV is Nevada"
;;
* )
echo "Unknown State Name"
;;
esac
$ ./case4.sh CA
CA is California
NV is Nevada
使用 ;;&
的案例
在下面的示例中,由于;;&
用于终止 CA 模式块,因此测试了 NV 情况,但失败。
因此,对 * 情况进行了测试,并且由于它总是成功,因此会打印 "Unknown State Name"
。
$ cat case5.sh
stateabbr=${1}
case $stateabbr in
NY )
echo "NY is New York"
;;&
CA )
echo "CA is California"
;;&
NV )
echo "NV is Nevada"
;;
* )
echo "Unknown State Name"
;;
esac
$ ./case5.sh CA
CA is California
Unknown State Name