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


11

在理解关于命令语法的选项和参数时,我遇到了一个令人困惑的变化。

例如,我遇到了如下定义:

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

我可以参考毫无疑问的官方命名方案吗?


从其自身的角度来看,第二种形式是100%正确的。上下文非常重要。
奥斯卡·斯科格

Answers:


18

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

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

示例中的实用程序名为utility_name。其后是optionsoption-arguments操作数

-字符和单个字母或数字组成的参数(例如)a称为选项(或历史上称为flags)。某些选项后跟一个选项参数,如所示[-c option_argument]。最后一个options和option-arguments之后的参数称为操作数

该标准还将“参数”定义为

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


utility_name命令行上的所有内容都是实用程序的参数,它们都显示在位置参数中如果它们是Shell脚本。术语选项,选项参数和操作数是命令行上这些参数的更特定名称。

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

如果是

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

从上面的文本中您已经注意到,从实用程序的提要(如实用程序的手册中给出)进行工作比尝试对命令行中键入的通用命令进行解码要容易得多。该手册将明确说明哪些选项带有选项参数,哪些参数是操作数等。

c恕我直言,称呼“值”是可以的。这不是标准化的东西,但是如果您说“ 是赋予的价值 ”,那么很少有人会误解您cb ”。从所讨论的实用程序的上下文中将很清楚。

例如

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

任何知道的人awk都会说这-v var="d"意味着“ 在命令行中awk变量var分配了值d ”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.