如何使用zparseopts同时解析长短命令行选项
解决zparseopts处理长短参数及可累加数组的问题
正确脚本实现
#!/usr/bin/env zsh # 初始化变量:pods为数组,from/to为单值字符串 typeset -a pods=() typeset from to # 用zparseopts解析参数 zparseopts -D -E \ -p:+pods \ --pod:+pods \ --from:=from \ -t:=to # 验证结果 echo "pods: ${pods[@]}" echo "from: $from" echo "to: $to"
关键语法说明
-D:处理完成后移除已解析的选项,避免干扰后续参数处理-E:将未匹配的非选项参数保留在$@中(本例无剩余参数,仅作规范)- 选项定义规则:
-p:+pods:短选项-p,+表示将参数追加到数组pods--pod:+pods:长选项--pod,同样追加参数到pods数组--from:=from:长选项--from,=表示将参数赋值覆盖给单值变量from-t:=to:短选项-t,赋值覆盖给单值变量to
测试结果
运行示例命令:
./foo.sh --pod longpod --pod longpod2 -p shortpod --from fromdate -t todate
输出符合预期:
pods: longpod longpod2 shortpod from: fromdate to: todate
错误原因分析
你之前未正确使用zparseopts的参数绑定标识:
- 可累加数组参数必须用
+指定追加行为,否则会把选项名(如--pod)也当作数据存入变量 - 单值参数必须用
=指定赋值行为,否则会出现选项名与参数拼接的错误(如--fromlongfrom)
内容的提问来源于stack exchange,提问作者Christian Bongiorno
相关产品推荐
相关产品推荐

