技术与生活 / 一篇记录
让短选项解析回归 getopts
手写位置参数判断容易漏掉组合选项,getopts 适合短选项接口。
参数数量变多后,手写 shift 与位置判断容易漏掉选项取值、未知字符和错误状态。getopts 提供基础解析循环,让脚本能把注意力放回实际业务。
操作与观察
以下示例使用 Bash,请在独立测试目录中理解输入、输出和退出码。
while getopts 'n:' opt; do case "$opt" in n) printf '%s\n' "$OPTARG";; *) exit 2;; esac; done
用 -n demo 测试参数,再测试遗漏值的情况。
逐项测试正确选项、没有值的选项和未知选项。解析完成后若还要处理位置参数,应根据 OPTIND 移动参数,而不是假定前两个参数已经用完。
同一选项是否允许重复出现,最好事先定义。覆盖前值、累积多个值或直接拒绝都可以,但应有清晰规则。解析后把最终选项集中展示为不含秘密的摘要,便于排查调用错误。
别遗漏这条边界
getopts 不直接提供通用的长选项解析能力。
参考:Shell 文档。