使用docopts限制flag参数为指定枚举值不触发校验如何解决?
问题原因
你的写法中Usage块的枚举约束和Options块的声明存在冲突:当你在Options块里明确写了--myflag=MYVALUE时,docopts会将--myflag识别为接受任意字符串值的选项参数,此时Usage块里列的foo/bar/baz三个固定值不会被当作校验规则,所有传入的参数值都会被直接接收,不会触发非法值报错。
修复方案
要使用docopts原生能力实现枚举校验,只需删除Options块中--myflag的带参声明,完全依赖Usage块的枚举规则做匹配即可,正确代码如下:
eval "$(docopts -h - : "$@" <<DOCOPTS My program: do some stuff Usage: myprogram --myflag foo myprogram --myflag bar myprogram --myflag baz Options: -m --myflag This should only be foo, bar, or baz. DOCOPTS )" echo the value of myflag is: $myflag
效果验证
修改后执行myprogram --myflag dog时,docopts会匹配不到符合要求的Usage规则,直接输出用法提示并退出,不会继续执行后续代码,符合预期。
内容的提问来源于stack exchange,提问作者2rs2ts
相关产品推荐
相关产品推荐

