Linux getopt_long vs getopt_long_only

Linux getopt_long vs getopt_long_only,linux,unix,getopt,getopt-long,Linux,Unix,Getopt,Getopt Long,要创建一个合适的Linux/unix风格的应用程序,最好的选择是什么(例如,afaik ls使用getopt_long,但例如仅使用ffmpeg getopt_long_)。 你推荐哪一个 干杯,都不是。用户argp\u parse或libpopt。我从来没有只使用过getopt\u long\u,但它似乎必须进行更多的查找,因为如果未知标志以单个-开头,它必须同时查看长选项和短选项: 如果选项以“-”开头(不是 “--”)与长选项不匹配,但 与短期权匹配,是吗 改为解析为短选项 --mange

要创建一个合适的Linux/unix风格的应用程序,最好的选择是什么(例如,afaik ls使用getopt_long,但例如仅使用ffmpeg getopt_long_)。 你推荐哪一个


干杯,

都不是。用户argp\u parse或libpopt。

我从来没有只使用过getopt\u long\u,但它似乎必须进行更多的查找,因为如果未知标志以单个
-
开头,它必须同时查看长选项和短选项:

如果选项以“-”开头(不是 “--”)与长选项不匹配,但 与短期权匹配,是吗 改为解析为短选项


--
mangetopt_long_only

我想说,为了“正确的gnu/linux风格”,您应该使用getopt_long(),并为大多数选项提供长选项(有时只提供长选项)。大多数命令行界面都遵循这一点。

在我看来,以下情况通常是正确的:

  • 用户喜欢长而自然的语言选项,因为它们易于记忆
  • 编写脚本包装具有数百个选项的程序的用户喜欢短选项
如果一个程序变得足够大,它最终将耗尽与规范选项相比具有任何意义的短期选项组合。例如,-Z可能与以完全不同的字母开头的长选项相同。在这一点上,特别是对于单个维护人员,解析代码的选项成为维护的一个难题

发生这种情况时,您有几个选择:

  • 使用类似的方法从模板中为您编写代码
  • 只使用长选项(通常是个坏主意)
  • 试着把你的程序减少到52个选项(a-z a-z)(通常是个坏主意)
  • 当短选项变成不带参数的开关时,实现选项,对带参数的开关使用长选项
  • 一系列其他方法对您来说非常有意义,但对用户来说却毫无意义
在不同的地方混在一起,你真的开始感受到痛苦

当我坐下来编写一个包含很多选项的工具时,我通常做的第一件事就是编写代码来解析参数,这有助于规划程序流程,并成为大纲。在那之后,你只需要让每个选项都起作用

换句话说,如果你的选择变成了一种长期的痛苦,这通常意味着一个计划很快就超出了它的计划


无论如何,为了结束我冗长的回答,通常最好尽可能保持compat getopt()行为。从用户那里获取指令的代码只是做生意的成本,因此,如果可能的话,您应该完全关注如何获得更好的用户体验。

argp_parse比getopt_long有什么优势?我快速查看了gengetopt,我只会在有很多选项的程序中使用它。。