'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
中对应的结束符是;|
.
bash
和zsh
都使用;;
终止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
无论upper
或lower
是否匹配,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.
此示例在 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
中对应的结束符是;|
.
bash
和zsh
都使用;;
终止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
无论upper
或lower
是否匹配,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.