术语之间的区别:"option"、"argument" 和 "parameter"?

Difference between terms: "option", "argument", and "parameter"?

"option"、"argument" 和 "parameter" 这些术语之间有什么区别?在手册页中,这些术语似乎经常互换使用。

command 被拆分为名为 arguments 的字符串数组。参数 0(通常)是命令名称,参数 1,命令后面的第一个元素,等等。这些参数有时称为 位置参数

$ ls -la /tmp /var/tmp
arg0 = ls
arg1 = -la
arg2 = /tmp
arg3 = /var/tmp

一个选项是一个记录1类型的参数修改命令,例如-l 通常表示“长”,-v 表示冗长。 -lv 两个 选项组合在一个 单个 参数中。还有long options like --verbose (see also Using getopts to process long and short command line options)。顾名思义,选项通常是可选的。然而,有些命令带有自相矛盾的“强制选项”。

$ ls -la /tmp /var/tmp
option1= -l
option2= -a

A parameter 是一个参数,它为 命令 或其 之一提供信息选项,例如在-o file中,file-o选项的参数。与可能的值在程序中硬编码的选项不同,参数通常不是,因此用户可以自由使用适合 his/her 需要的任何字符串。如果你需要传递一个看起来像选项但不应被解释为选项的参数,你可以用双破折号将它与命令行的开头分开:--2.

$ ls -la /tmp /var/tmp
parameter1= /tmp
parameter2= /var/tmp

$ ls -l -- -a
option1    = -l
parameter1 = -a

A shell parameter 是在 shell 的上下文中存储值的任何内容。这包括位置参数(例如 </code>、<code>...)、变量(例如 $foo$bar...)和特殊字符(例如 $@)

最后,还有subcommands,也称为函数/(低级)命令,与嵌入多个单独命令的“元命令”一起使用,例如 busyboxgitapt-getopenssl 等。有了它们,您可能在子命令之前有全局选项,在子命令之后有子命令特定选项。与参数不同,可能的子命令列表是硬编码在命令本身中的。例如:

$ busybox ls -l
command            = busybox
subcommand         = ls
subcommand option1 = -l

$ git --git-dir=a.git --work-tree=b -C c status -s
command            = git
command option1    = --git-dir=a.git
command option2    = --work-tree=b
command option3    = -C c
subcommand         = status
subcommand option1 = -s

请注意,testtarddfind 等命令的参数解析语法比前面描述的更复杂,并且可以包含部分或全部他们的参数被解析为 expressionsoperandskeys 和类似的命令特定组件。

另请注意,尽管 shell 处理波浪号扩展、参数扩展、命令替换、算术扩展和引号删除,但不考虑像其他命令行参数那样的可选变量赋值和重定向在我的回复中,因为当实际调用命令并传递其参数时它们已经消失了。

1 我应该写 通常有记录的 因为当然,没有记录的选项仍然是选项。
2 双破折号功能需要程序实现。

典型 Unix 命令的 man 页通常使用术语 argumentoptionparameter。在最低级别,我们有 argument 并且一切都是参数,包括(文件系统路径)命令本身。

在 shell 脚本中,您使用特殊变量 [=16=] .. $n 访问参数。其他语言也有类似的方法来访问它们(通常是通过名称类似于 argv 的数组)。

如果您愿意,

参数可以解释为选项。这是如何完成的是特定于实现的。您可以自己滚动,例如 shell(例如 bash)脚本可以使用提供的 getoptsgetopt 命令。

这些通常将 选项 定义为以连字符 (-) 开头的参数,并且某些选项可能使用后续参数作为其参数。更强大的解析器(例如 getopt)支持混合使用短格式(-h)和长格式(--help)选项。

通常,大多数选项采用零个或一个参数。此类参数有时也称为 values.

支持的选项编码在程序代码中(例如在 shell 脚本中调用 getopts)。使用选项后的任何剩余参数通常称为 位置参数 当它们给出的顺序很重要时(这与通常可以以任何顺序给出的选项相反) .

同样,脚本通过它如何消耗和使用它们来定义位置参数是什么。

所以一个典型的命令

$ ls -I README -l foo 'bar car' baz

有七个参数:/usr/bin/ls-IREADME-lfoobar carbaz 可访问为 [=16=]</code>。 <code>-l-I 被解释为 选项 ,后者有一个 参数 (或 ) 个 README。剩下的是位置参数foobar carbaz)。

选项解析可能会通过删除它消耗的参数来改变参数列表(例如使用 shiftset),这样只有位置参数保留下来,之后可以作为 </code> 访问。 .<code>$n.

由于问题被标记为“bash”,我在 the Bash manual 中查找了相关部分。我将这些作为引用的段落连同我自己的一句话总结列在下面。

参数

命令后面的所有内容都是参数。

A simple shell command such as echo a b c consists of the command itself followed by arguments, separated by spaces.

A simple command is the kind of command encountered most often. It’s just a sequence of words separated by blanks, terminated by one of the shell’s control operators (see Definitions). The first word generally specifies a command to be executed, with the rest of the words being that command’s arguments.

参数

参数在函数执行期间称为参数。

When a function is executed, the arguments to the function become the positional parameters during its execution

A parameter is an entity that stores values. It can be a name, a number, or one of the special characters listed below. A variable is a parameter denoted by a name.

A positional parameter is a parameter denoted by one or more digits, other than the single digit 0. Positional parameters are assigned from the shell’s arguments when it is invoked, and may be reassigned using the set builtin command. Positional parameter N may be referenced as ${N}, or as $N when N consists of a single digit.

选项

没有专门的部分来定义选项是什么,但在整个手册中它们被称为带连字符前缀的字符。

The -p option changes the output format to that specified by POSIX