4

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

干杯,

4

4 回答 4

5

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

  • 用户喜欢长而自然的语言选项,因为它们很容易记住。
  • 编写脚本来包装具有数百个选项的程序的用户喜欢简短的选项。

如果一个程序变得足够大,它最终会用完与规范选项相比具有任何意义的短选项组合。例如,-Z 可能与以完全不同的字母开头的长选项相同。到那时,尤其是对于单个维护者来说,选项解析代码就变得很头疼了。

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

  • 使用类似gengetopt的东西从模板中为您编写代码
  • 只使用长选项(通常是个坏主意)
  • 尝试将您的程序减少到 52 个选项 (az AZ)(通常是个坏主意)
  • 实现选项,其中短选项只是变成不带参数的开关,对那些使用长选项
  • 一系列其他对您来说非常有意义但对用户没有意义的方法

混合在不同的地方,你真的开始掌握痛苦。

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

换句话说,如果你到了选择成为一种慢性痛苦的地步,它通常表明一个程序迅速发展超出了它的计划。

无论如何,要结束我冗长的回答,通常最好尽可能保持兼容的 getopt() 行为。从用户那里获得指令的代码只是做生意的成本,所以你应该尽可能地关注什么是更好的用户体验。

于 2010-03-15T03:54:48.650 回答
2

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

于 2010-03-15T03:32:46.440 回答
1

两者都不。用户 argp_parse 或 libpopt。

于 2010-02-03T14:34:00.087 回答
0

我从未使用过 getopt_long_only,但似乎它必须进行更多查找,因为如果未知标志以单个开头,它必须同时查看长选项和短选项-

如果以“-”(不是“--”)开头的选项不匹配长选项,但匹配短选项,则将其解析为短选项。

--man getopt_long_only

于 2010-02-03T14:34:36.273 回答