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

Unix 如何表示在打印时命令行参数是可选的,unix,command-line,arguments,Unix,Command Line,Arguments,假设我有一个脚本,可以通过以下任一方式运行 ./foo arg1 arg2 ./foo 在打印命令的正确用法时,是否有一种普遍接受的方式来表示arg1和arg2不是强制参数 我有时注意到使用括号中的参数打印的用法,如下面的用法打印输出 Usage: ./foo [arg1] [arg2] 这些括号是否表示参数是可选的,或者是否有另一种普遍接受的方式表示参数是可选的 我个人没有看到一个“标准”表示开关是可选的(例如,有一个标准定义了某些语言的编写方式),因为这确实是个人的选择,但根据和,以及我

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

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

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

Usage: ./foo [arg1] [arg2]

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

我个人没有看到一个“标准”表示开关是可选的(例如,有一个标准定义了某些语言的编写方式),因为这确实是个人的选择,但根据和,以及我个人看到的许多shell脚本(以及各种程序的命令行选项),IEEE的“事实”是将方括号(
[]
)参数视为可选参数。来自Linux的示例:

ping
(输出修剪…)

其中
[-c count]
[-t ttl]
是可选参数,但
主机
不是(如帮助中所定义)

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


我应该注意到,计算机标准应该定义某件事情是如何发生的及其故障路径(真正的故障或未定义的行为)。类似于
命令行解释器的一些东西,当包含在方括号中时,应将参数视为可选参数,当Z时,应将X视为Y,等等。
。很像ISO C标准所说的,函数应该如何形成以使其有效(否则将失败)。考虑到没有任何命令行解释器(从ASH到ZSH,以及介于两者之间的所有解释器)无法通过脚本将
[]
视为非可选,可以说没有真正的标准。

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

从“男人”开始:


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

我想这是一个标准

开放组基础规范第7期

IEEE标准1003.12013版

版权所有©2001-2013 IEEE和开放集团

虽然它似乎没有提到很多我多年来经常看到的用来表示各种含义的东西:

  • 方括号
    [可选选项]
  • 尖括号
  • 花括号
    {default values}
  • 括号
    (杂项信息)

编辑:我应该补充一下,这些只是约定。重要的是选择一个合理的惯例,清楚地陈述你的惯例,并始终如一地坚持下去。灵活地创建在目标平台上最常见的约定。它们将是用户最容易适应的。

我从未想过它们是否在某个地方被正式指定,我总是假设它们来自抽象代数中使用的约定,特别是在抽象代数中

“尖括号用于表示单个参数的短语的符号分组,符合要求的应用程序不得将其包含在提交给公用事业公司的数据中”-看起来它并没有提到参数的强制性,不是吗?如果您之前只读了一句话,它清楚地说明了这一点。”通常,需要用实际值替换的参数名称以嵌入字符显示。“需要的名称(即必填)按实际值替换。正如我前面提到的,这些是常见的约定。实际上没有硬标准。我已经看到这些约定使用了25年以上,比开放组基础规范存在的时间早了几年。这些“规范“只是试图正式描述这些惯例,尽管它们写得相当糟糕。一个相关的问题是。
usage: ping [-c count] [-t ttl] host