You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Zsh脚本中case语句的-d选项未生效,求排查原因

问题原因与解决方法

你的问题出在getopts的选项定义上:

  • 你写的":chapd:"里,d后面带了冒号,这会告诉getopts,-d选项必须携带参数
  • 当你执行hsshots -d时没有传参数,getopts会跳过d的case分支,自然不会执行Delete函数

修复步骤

  1. 修改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
  1. 重新执行hsshots -d,Delete函数的调试echo应该就能正常输出了

补充说明

getopts的选项字符串规则:

  • 开头的冒号:抑制默认的错误提示
  • 选项字母后加冒号:表示该选项需要接收一个参数(比如-f filename)
  • 选项字母后不加冒号:表示该选项是无参数开关(比如你的-c/-h/-a/-p/-d)

内容的提问来源于stack exchange,提问作者P05TMAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:13:14