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