【发布时间】:2010-02-03 14:29:57
【问题描述】:
要做一个合适的 Linux/unix 风格的应用程序,最好的选择是什么(例如,afaik ls 使用 getopt_long,但例如 ffmpeg getopt_long_only)。 你推荐哪一个?
干杯,
【问题讨论】:
标签: linux unix getopt getopt-long
要做一个合适的 Linux/unix 风格的应用程序,最好的选择是什么(例如,afaik ls 使用 getopt_long,但例如 ffmpeg getopt_long_only)。 你推荐哪一个?
干杯,
【问题讨论】:
标签: linux unix getopt getopt-long
在我看来,以下几点通常是正确的:
如果一个程序变得足够大,它最终会用完与规范选项相比具有任何意义的短选项组合。例如,-Z 可能与以完全不同的字母开头的长选项相同。到那时,特别是对于单个维护者来说,选项解析代码就变得很头疼了。
当这种情况发生时,你有几个选择:
混合在不同的语言环境中,你就真正开始掌握痛苦了。
当我坐下来写一个有很多选项的工具时,我通常做的第一件事就是编写代码来解析参数,这有助于规划程序的流程并成为一个大纲。之后您只需让每个选项都起作用。
换句话说,如果您到了选择成为一种长期痛苦的地步,这通常表明该计划的发展迅速超出了其计划。
无论如何,要结束我冗长的回答,通常最好尽可能保持兼容的 getopt() 行为。从用户那里获得指令的代码只是做生意的成本,所以你应该完全关注什么可以带来更好的用户体验,如果可能的话。
【讨论】:
我会说对于“正确的 gnu/linux 风格”,您应该使用 getopt_long() 并为大多数选项提供长选项(有时仅提供长选项)。大多数命令行界面都遵循这一点。
【讨论】:
两者都没有。使用 argp_parse 或 libpopt。
【讨论】:
我从未使用过 getopt_long_only,但它似乎需要进行更多查找,因为如果未知标志以单个 - 开头,它必须同时查看长选项和短选项:
如果选项以“-”开头(不是 '--') 不匹配长选项,但是 确实匹配一个短选项,它是 而是被解析为一个简短的选项。
-- man getopt_long_only
【讨论】: