如何表示打印用法时命令行参数是可选的

假设我有一个脚本,可以通过以下任何一种方式运行。

./foo arg1 arg2
./foo

在打印命令的正确用法时,是否有一种普遍接受的方法来表示 arg1和 arg2不是强制参数?

我有时注意到,打印出来的用法使用括号中的参数,如下面的用法打印输出。

Usage: ./foo [arg1] [arg2]

这些括号是表示参数是可选的,还是有另一种普遍接受的方式表示参数是可选的?

68174 次浏览

我个人还没有看到一个“标准”来表示开关是可选的(比如有一个标准来定义某些语言是如何编写的) ,因为它实际上是个人选择,但根据 IBM 的文件维基百科,以及我个人看到的大量 shell 脚本(以及来自各种程序的命令行选项)和 IEEE,“事实上”是把方括号([])参数当作可选参数。来自 Linux 的例子:

ping(输出调整...)

usage: ping [-c count] [-t ttl] host

其中 [-c count][-t ttl]是可选参数,而 host不是(如帮助中定义的)。

我个人也遵循事实,使用 []来表示它们是可选参数,并确保在使用该脚本/程序时注意到这一点。

我应该指出,计算机标准应该定义事情如何发生及其故障路径(真正的故障或未定义行为)。类似 the command line interpreter _shall_ treat arguments as optional when enclosed in square brackets, and _shall_ treat X as Y when Z, etc.的东西。就像 ISO C 标准说的,函数 应该是如何形成的以使其有效(否则就会失败)。假设没有命令行解释器(从 ASH 到 ZSH 以及介于两者之间的所有命令行解释器)会使脚本无法将 []视为任何非可选的内容,那么可以说没有一个真正的标准。

是的,方括号表示 Unix 手册页中的可选参数。

来自“男人”:

[-Abc]中的任何或所有参数都是可选的。

我想这也算是个标准吧。

开放组基础规范问题7

IEEE Std 1003.1,2013 Edition IEEE 标准1003.1,2013年版

版权所有2001-2013

第12章-公用事业惯例

尽管它似乎没有提到很多我多年来经常看到的用来表示不同含义的东西:

  • 方括号
  • 角括号
  • 花括号 {default values}
  • 括号 (miscellaneous info)

编辑: 我应该补充一下,这些只是惯例。重要的是选择一个合理的惯例,清楚地说明你的惯例,并坚持不懈。保持灵活性,创建在目标平台上似乎最常遇到的约定。它们将是用户最容易适应的。

我从来没有想过它们是否在某个地方被正式指定,我只是假设它们来自抽象代数中使用的约定,特别是在 BNF 语法中。