Zsh脚本中case语句的-d选项未生效,求排查原因
问题原因与解决方法
你的问题出在getopts的选项定义上:
- 你写的
":chapd:"里,d后面带了冒号,这会告诉getopts,-d选项必须携带参数 - 当你执行
hsshots -d时没有传参数,getopts会跳过d的case分支,自然不会执行Delete函数
修复步骤
- 修改
getopts的选项字符串,去掉d后面的冒号:
while getopts ":chapd" option; do case $option in c) CreateDir; exit;; h) Help; exit;; a) Archive; exit;; p) pArchive; exit;; d) Delete; exit;; \?) echo "ERROR: Invalid option!"; exit;; esac done
- 重新执行
hsshots -d,Delete函数的调试echo应该就能正常输出了
补充说明
getopts的选项字符串规则:
- 开头的冒号:抑制默认的错误提示
- 选项字母后加冒号:表示该选项需要接收一个参数(比如
-f filename) - 选项字母后不加冒号:表示该选项是无参数开关(比如你的
-c/-h/-a/-p/-d)
内容的提问来源于stack exchange,提问作者P05TMAN
相关产品推荐
相关产品推荐

