Section 38.1: 简单的 case 语句

在所有 bash 版本的支持中 case 语句执行与模式匹配的 case 是最简单。

操作符 ;; 会在匹配到第一个匹配项后执行里面的命令之后中断。

#!/bin/bash
var=1
case $var in
    1)
        echo "Antartica"
        ;;
    2)
        echo "Brazil"
        ;;
    3)
        echo "Cat"
        ;;
esac

Outputs:

Antartica

Section 38.2: 下穿机制的 case 语句

Version ≥ 4.0

自 bash 4.0 起,引入了一个新的操作符 ;&,它提供了下穿机制。

#!/bin/bash
var=1
case $var in
    1)
        echo "Antartica"
        ;&
    2)
        echo "Brazil"
        ;&
    3)
        echo "Cat"
        ;&
esac

输出:

Antartica
Brazil
Cat

Section 38.3: 仅当后续模式匹配时才通过

Version ≥ 4.0

自 Bash 4.0 起,引入了另一个运算符 ;;& ,该运算符也提供了仅在后续 case 语句(如果有)中的模式匹配时才跳过的功能。

在下面的示例中,abc 符合第一和第三种情况,但不符合第二种情况。因此,第二种情况不会被执行。

#!/bin/bash
var=abc
case $var in
    a*)
        echo "Antartica"
        ;;&
    xyz)
        echo "Brazil"
        ;;&
    *b*)
        echo "Cat"
        ;;&
esac

输出:

Antartica
Cat