linux - 带有';;&'的linux zsh shell中的'case':在'&'附近解析错误
问题描述
这个例子在我正在关注的 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 `&'
任何人都可以提供解决方案吗?
解决方案
In bash
,;;&
导致case
语句测试下一个模式而不是退出case
语句。
在zsh
中,对应的终止符是;|
。
两者bash
和zsh
用于;;
终止case
语句 ad;&
以执行与下一个模式关联的列表,无论该模式是否实际匹配。
最后的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.
推荐阅读
- java - 使用泛型查询
- django - 使用外键将数据发送到两个不同的字段
- angular - 尝试捆绑文件时,npm run 脚本返回“没有这样的文件或目录”
- html - Ionic 5:离子卡的造型
- javascript - 如何对一个 textarea 组件的文本值进行数据绑定并更新它?
- windows - Windows中是否有可以通过文件名移动到文件夹的命令?
- maven - GITLAB-CI:仅当 pom 版本是快照或其 git 标签时才部署到 DEV
- powershell - 从函数返回 null 的引用变量
- apache - docker-compose build 无法正确构建
- amazon-web-services - 更改 EC2 实例的私钥