GNU getopt()的-W选项用于什么?

时间:2013-01-15 12:54:20

标签: c linux unix command-line

引自the POSIX.1-2008 description about -W option

  

-W (大写字母W)选项应保留给供应商选项。

引自Linux手册页GNU getopt handles -W option as follows

  

如果 optstring 包含 W ,后跟分号(;),则 {{1 <}> 被视为长选项 -W foo 。 (POSIX.2为 -W 选项保留了实现扩展。)

有人可以用更清晰的方式解释上述句子(直截了当)并解释为什么这样的选项有用吗?

上述陈述让我感到困惑,因为我认为--foo(不是getoptgetopt_long)只能理解短期权。

2 个答案:

答案 0 :(得分:5)

退房:http://www.gnu.org/software/gnuprologjava/api/gnu/getopt/Getopt.html

  

也可以使用特殊的POSIX参数指定长选项   格式(我非常劝阻)。这种形式的输入已启用   放置一个“W;” (是的,'W'然后是分号)在有效选项中   串。这会导致getopt将“-W”后面的名称视为   长选项的名称。例如,“-W outputdir = foo”将是   相当于“--outputdir = foo”。这个名字可以紧随其后   “-W”如此:“ - Woutputdir = foo”。处理选项参数   与正常的长期期权相同。如果字符串跟随“-W”那么   不表示有效的长选项,然后getopt()返回'W'和   呼叫者必须决定做什么。否则getopt()返回一个long   选项值如下所述。

答案 1 :(得分:2)

文档有点不清楚,我的解释是关于-W的部分仅适用于getopt_long()getopt_long_only()

幸运的是,GNU C库是开源的。 :)

在内部,所有这三个函数都是通过调用worker函数(_getopt_internal())来实现的,并且-W的处理是在该函数内部完成的。但是,如果没有可用的长选项定义(从getopt()调用的情况就是如此),它将返回'W'

请参阅this commit,或直接点按即可直接阅读posix/getopt.c