sha*_*ant 11 command-line standard gnu
我在理解命令语法方面的选项和参数方面遇到了令人困惑的变化。
例如,我遇到了如下定义:
command -a -b -c d e f
有些在 之间有所不同-a -b -c
,将它们称为选项或开关,d e f
并将它们称为参数。
command -a -b -c d e f
有些,例如bash
手册,调用所有-a -b -c d e f
参数并解释说,它们都可以$1 $2 $3 $4 $5 $6
分别从脚本中访问。
command -a b=c
有些调用-a
一个选项,b
一个参数和c
值,但其他人像前两点一样将它们混合在一起,在一个变体中调用所有-a b c
参数。
这三个版本只是大量不同调用变体的示例,我什至不知道如何将它们全部列出,但我注意到肯定没有固定的命名约定。
或者至少,我知道没有标准化的命名约定,因为我遇到了不同的随机来源,但即使在官方 Linux 和 GNU 附属站点或手册中,我也可能遇到这种不一致的情况。
有没有毫无疑问的官方命名方案可以参考?
Kus*_*nda 18
改编自POSIX 标准的“Utility Argument Syntax”部分:
utility_name [-a] [-b] [-c option_argument]
[-d|-e] [-f[option_argument]] [operand...]
Run Code Online (Sandbox Code Playgroud)
示例中的实用程序名为utility_name
。其后是options、option-arguments和operands。
由-
字符和单个字母或数字组成的参数,例如a
,被称为选项(或者,历史上,标志)。某些选项后跟一个选项参数,如 所示[-c option_argument]
。最后一个选项和选项参数后面的参数被命名为操作数。
该标准还将“参数”定义为
在 shell 命令语言中,传递给实用程序的参数相当于
argv
由exec
函数之一创建的数组中的单个字符串。参数是命令名称后面的选项、选项参数或操作数之一。
utility_name
命令行上之后的所有内容都是实用程序的参数,如果它是 shell 脚本,它们都显示在位置参数中。术语选项、选项参数和操作数是命令行上这些参数的更具体名称。
“标志”和“开关”是“选项”的常见同义词。
如果是
utility -a b=c
Run Code Online (Sandbox Code Playgroud)
-a
并且b=c
是论据,-a
是一个选项,如果实用程序将其识别为这样(ln
实用程序没有-x
选项,因此严格来说-x
不是一个选项ln
,并且ln -x
会触发诊断消息),b=c
是一个选项参数,如果该-a
选项接受一个参数,否则这是一个操作数,b
和c
是不是选项,选项参数,而不是操作数本身。正如您从我上面的文字中注意到的那样,根据实用程序的概要(由实用程序的手册给出)比尝试解码在命令行上键入的通用命令更容易。该手册将清楚地说明哪些选项采用选项参数以及哪些参数是操作数等。
c
恕我直言,调用“值”完全没问题。这不是标准化的东西,但是如果您说“c
是赋予给的价值b
”,则很少有人会误解您。从所讨论的公用事业的上下文中可以清楚地看出这一点。
例如
$ awk -v var="d" '...' data.in
Run Code Online (Sandbox Code Playgroud)
任何人谁知道awk
会说-v var="d"
的意思是“该awk
变量var
被赋值为d
在命令行上”。