什么是标准用法参数样式



我正在为正在进行的一些研究制作一些命令行工具。我希望这些工具遵循Unix中关于命令行程序的常用约定。

我应该使用标志还是只列出参数?

program one two three
program -a one -b two -c three
  • 在命令列表中,输入文件通常放在哪里,还是最好将其<放入程序中
  • 输出文件名如何
  • 我应该为输出格式指定文件扩展名,还是让我的程序自动设置正确的扩展名
  • 当用户输入无效命令时,是否有典型的"正确使用"消息
  • 需要"--help"还是"-h"

此外,我是否可以包含一些有助于管理这些文件的头文件?

如果您正在寻找一个"标准",那么您可能会比查看GNU的命令行接口标准做得更糟。其他标准也可用。

就编码而言,请查看boost::program_options。这不仅可以节省大量自己的代码,而且可以很好地格式化向用户显示的选项(您要求的典型"正确使用"消息)。

回答您的具体问题:

  • 在命令列表中,输入文件通常放在哪里,还是最好<它进入程序

我希望这些是在命令行的末尾出现的。就像GNU grep中一样。如果您只处理一个文件,并且希望将stdin作为输入源,那么大多数用户都不会感到惊讶。

如果您的命令处理大量文件,那么在文件名之前指定开关是不常见的。想想cat

  • 输出文件名如何

-o--output选项相当常见。如果您的文件只接受一个输入和一个输出,那么program inputfile outputfile不会让许多用户感到惊讶。如果没有指定输出文件,也许您将输出到stdout;这将是一种不寻常的行为,并将允许您的用户通过其他命令(如grepless等…)传输输出。他们还可以使用>将stdout重定向到文件。

  • 我应该为输出格式指定文件扩展名,还是让我的程序自动设置正确的扩展名

这可能是一个值得讨论的问题。如果我指定了一个输出文件名,我会发现该文件是在程序不更改名称的情况下创建的(或在提示后替换的)。

  • 当用户输入无效命令时,是否有典型的"正确使用"消息

再次以GNU grep为例:

grep: unrecognized option '--incorrect'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.

这不会让太多用户感到惊讶,并为他们指明了正确的方向,如果他们在没有信息淹没的情况下拼写错误的话。

  • 是否需要"--help"或"-h"

这取决于您的客户!当这个选项不可用时,我觉得很沮丧。

通常情况下,标志用于提供选项,参数用于传递信息。若您有输入,输出文件作为命令行参数,使用像-i-o这样的标志,那个么序列就无关紧要了-如果您想要(并且需要)提供文档,则需要h。

最新更新