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

Posted

技术标签:

【中文标题】打印用法时如何表示命令行参数是可选的【英文标题】:How to denote that a command line argument is optional when printing usage 【发布时间】:2014-02-25 13:15:19 【问题描述】:

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

./foo arg1 arg2
./foo

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

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

Usage: ./foo [arg1] [arg2]

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

【问题讨论】:

一个相关的问题是***.com/questions/23242493。 【参考方案1】:

我想这是一个标准。

开放组基本规范第 7 期

IEEE Std 1003.1, 2013 版

版权所有 © 2001-2013 The IEEE 和 The Open Group

Ch. 12 - Utility Conventions

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

方括号[optional option] 尖括号<required argument> 花括号default values 括号(miscellaneous info)

编辑:我应该补充一点,这些只是约定。重要的是选择一个明智的约定,清楚地说明您的约定,并始终如一地坚持下去。要灵活并创建似乎在您的目标平台上最常遇到的约定。它们将是用户最容易适应的。

【讨论】:

“尖括号用于对表示单个参数的短语进行符号分组,符合要求的应用程序不应将它们包含在提交给实用程序的数据中” - 看起来它没有谈论强制性参数,不是吗? 如果您之前只读过 1 句话,它显然说明了很多。 “通常,需要用实际值替换的参数名称显示为嵌入 字符。”需要(即强制)用实际值替换的名称。正如我之前提到的,这些是常见的约定。真的没有硬性标准。我已经看到这些约定已经使用了 25 多年,比 The Open Group Base Specifications 还早几年。这些“规范”只是试图正式描述这些约定,尽管它们写得相当糟糕。【参考方案2】:

我个人还没有看到表示开关是可选的“标准”(例如,有一个标准来定义某些语言的编写方式),因为这确实是个人选择,但根据IBM's docs 和Wiki,以及我个人见过的大量 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 标准说明了如何形成一个函数 shall 以使其有效(否则它会失败)。鉴于没有命令行解释器(从 ASH 到 ZSH 以及介于两者之间的所有内容)无法将 [] 视为非可选的脚本,因此可以说没有真正的标准。

【讨论】:

【参考方案3】:

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

来自“男人男人”:

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

【讨论】:

【参考方案4】:

我从不怀疑它们是否在某处被正式指定,我一直只是假设它们来自抽象代数中使用的约定,特别是在 BNF grammars 中。

【讨论】:

以上是关于打印用法时如何表示命令行参数是可选的的主要内容,如果未能解决你的问题,请参考以下文章

Linux|命令格式详解及echo命令参数用法详解

linux基础命令

Shell基本命令

Linux:基础命令

Linux基本命令2

Linux03 /Linux基本命令