'case' in linux zsh shell with ';;&' : `&' 附近的解析错误

'case' in linux zsh shell with ';;&' : parse error near `&'

此示例在 linux 书中给出,我正在阅读该书以在输入匹配多个案例时显示多个输出。这本书正在使用 bash shell 但我正在使用 zsh shell.

#! /bin/zsh

# testing the 'case' syntax of zsh

read \?"enter a character: " 

case "$REPLY" in
 
    [[:upper:]])    echo "The input is an uppercase letter.";;&
    [[:lower:]])    echo "The input is a lowercase letter.";;&
    [[:alpha:]])    echo "The input is an alphanumeric letter.";;&
    *)              echo "Input is invalid.";;&
esac

输出应该是字母数字大小写和小写字母。 但是显示的错误是:

enter a character : f
/home/user/bin/case_testing.sh:9: parse error near `&'

哪位好心人可以提供解决方案?

bash 中,;;& 导致 case 语句测试下一个模式而不是退出 case 语句。

zsh中对应的结束符是;|.

bashzsh都使用;;终止case语句,;&执行与下一个模式关联的列表,无论是该模式实际上不匹配。

最终的 case 语句应如下所示:

case "$REPLY" in

    [[:upper:]])    echo "The input is an uppercase letter." ;|
    [[:lower:]])    echo "The input is a lowercase letter." ;|
    [[:alnum:]])    echo "The input is an alphanumeric letter." ;;
    *)              echo "Input is invalid." ;;
esac

无论upperlower是否匹配,alnum都能匹配。但是如果 alnum 成功,你不想继续 *,所以使用常规的 ;; 终止符。

~ % zsh tmp.sh <<< f
The input is a lowercase letter.
The input is an alphanumeric letter.
~ % zsh tmp.sh <<< F
The input is an uppercase letter.
The input is an alphanumeric letter.
~ % zsh tmp.sh <<< 3
The input is an alphanumeric letter.
~ % zsh tmp.sh <<< "#"
Input is invalid.