关于改变参数和选项含义的困惑,是否有官方标准定义?

关于改变参数和选项含义的困惑,是否有官方标准定义?

在理解命令语法的选项和参数是什么时,我遇到了令人困惑的变化。

例如,我遇到过这样的定义:

  • 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 附属站点或手册中,我也可能遇到这种不一致。

有没有一个毫无疑问的官方命名方案可以参考?

答案1

改编自POSIX 标准的“实用程序参数语法”部分

utility_name [-a] [-b] [-c option_argument]
             [-d|-e] [-f[option_argument]] [operand...]

示例中的实用程序名为utility_name.接下来是选项,选项参数, 和操作数

由字符和单个字母或数字组成的参数-(例如a)称为选项(或者,从历史上看,旗帜)。某些选项后面带有选项参数,如图所示[-c option_argument]。最后一个选项和选项参数后面的参数被命名为操作数

标准还将“参数”定义为

在 shell 命令语言中,传递给实用程序的参数,相当于函数argv之一创建的数组中的单个字符串exec。参数是命令名称后面的选项、选项参数或操作数之一。


utility_name命令行中后面的所有内容都是实用程序的论点,并且它们都出现在位置参数如果它是一个shell脚本。术语“选项”、“选项参数”和“操作数”是命令行上这些参数的更具体名称。

“标志”和“开关”是“选项”的常见同义词。

如果是

utility -a b=c
  • -ab=c参数,
  • -a是一个选项如果该实用程序如此识别它(严格来说,该ln实用程序没有-x选项,因此-x不是 的选项ln,并且ln -x会触发诊断消息),
  • b=c是一个选项参数如果-a选项需要一个参数,否则它是一个操作数,
  • b并且c不是选项、选项参数而不是操作数本身。

正如您从我上面的文字中注意到的那样,从概要实用程序的(如实用程序手册中给出的)比尝试解码在命令行上键入的通用命令更容易。该手册将清楚地说明哪些选项采用选项参数以及哪些参数是操作数等。

恕我直言,调用c“值”是完全可以的。这不是一个标准化的东西,但如果你说“”,很少有人会误解你c是赋予的值b“。从相关公用事业的背景中可以清楚地看出这一点。

例如

$ awk -v var="d" '...' data.in

任何了解的人awk都会说这-v var="d"意味着“awk变量在命令行上var被赋值d”。

相关内容