为何getopt遇未识别选项返回0退出状态?与手册描述不符的疑问
GNU getopt处理
--后参数的行为说明 这是GNU getopt与传统Unix getopt的行为差异导致的,返回退出状态0是符合GNU版本设计的正常情况,原因如下:
- GNU getopt里,
--是明确的选项结束标记。一旦碰到--,后面所有内容(哪怕是以-或--开头的字符串)都会被当作位置参数处理,不会再被解析为选项。所以你命令里的--bar不是“未识别选项”,而是合法的位置参数,自然不会触发解析错误。 - 你看到的输出
--是GNU getopt的标准输出格式:先输出处理后的选项部分(这里没有匹配的选项,所以为空),再输出--作为选项与位置参数的分隔符,理论上后面还应该跟着位置参数--bar。如果你的输出只有--,可能是执行环境的特殊处理,但返回0的逻辑是一致的——没有发生选项解析错误。 - 传统Unix getopt的行为确实如你提到的手册所述:对
--之后的内容仍可能当作选项解析,但GNU getopt做了功能扩展,把--之后的内容完全视为位置参数,这是两者的核心区别。
简单说:你用的是GNU版本的getopt,它对--的处理逻辑和传统Unix版本不一样,--bar在这里是合法参数,所以返回0是对的。
内容的提问来源于stack exchange,提问作者Lawrence I. Siden
相关产品推荐
相关产品推荐

