术语之间的区别:"选项","参数"和"参数"?

wha*_*hat 50 parameters bash shell arguments option

这些术语有什么区别:"选项","参数"和"参数"?在手册页中,这些术语通常似乎可以互换使用.

jll*_*gre 93

命令被分成称为字符串数组参数.参数0(通常)是命令名,参数1,命令后面的第一个元素,依此类推.

$ ls -la /tmp /var/tmp
arg0 = ls
arg1 = -la
arg2 = /tmp
arg3 = /var/tmp
Run Code Online (Sandbox Code Playgroud)

一个选项是一个记录类型参数修改的行为命令,例如-l通常的意思是"长",-v冗长.-lv2级的选项合并于一个单一的参数.还有很长的选择--verbose.顾名思义,选项通常是可选的.然而,有些命令带有矛盾的"强制选项".

$ ls -la /tmp /var/tmp
option1= -l
option2= -a
Run Code Online (Sandbox Code Playgroud)

参数是要么所述提供信息的参数命令或它的一个选项,例如在-o file,文件是的参数-o选项.与可能的值在程序中硬编码的选项不同,参数通常不是,因此用户可以自由地使用适合他/她需要的任何字符串.如果您需要传递一个看起来像一个选项但不应该被解释为的参数,您可以使用双短划线将其与命令行的开头分开:--.

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

$ ls -l -- -a
option1    = -l
parameter1 = -a
Run Code Online (Sandbox Code Playgroud)

最后,还有,也被称为功能/(低电平)的命令,这是与该嵌入多个单独的命令"元命令"使用,像$1,$2,$foo,$bar,和喜欢.使用它们,您可以在子命令之前使用全局选项,并在子命令之后使用子命令特定选项.与参数不同,可能的子命令列表在命令本身中是硬编码的.例如:

$ 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
subcommand         = status
subcommand option1 = -s
Run Code Online (Sandbox Code Playgroud)

需要注意的是像一些命令$@,busybox,gitapt-get具有比之前所描述的更复杂的参数解析语法,有部分或全部它们的参数解析为openssl,test,tar和类似命令的具体内容.


sta*_*fry 8

man一个典型的Unix命令页面经常使用的术语argument,optionparameter.在最低级别,我们拥有argument并且所有内容都是参数,包括(文件系统路径)命令本身.

在一个shell脚本您使用的特殊变量访问参数$0.. $n.其他语言有类似的方式来访问它们(通常通过名称相似的数组argv).

如果您愿意,可以将参数解释为选项.如何做到这一点是特定于实现的.您可以自己滚动,例如shell(例如bash)脚本可以使用提供的getoptsgetopt命令.

这些通常将选项定义为以连字符(-)开头的参数,并且某些选项可以使用前进参数作为其参数.更强大的解析器(例如getopt)支持混合short-form(-h)和long-form(--help)选项.

通常,大多数选项采用零个或一个参数.这些参数有时也称为.

支持的选项在程序代码中编码(例如,getopts在shell脚本中调用).选项消耗后的任何剩余参数通常称为位置参数,当它们的给定顺序很重要时(这与通常可以按任何顺序给出的选项形成对比).

同样,脚本根据消耗和使用它们的方式定义位置参数.

所以一个典型的命令

$ ls -I README -l foo 'bar car' baz
Run Code Online (Sandbox Code Playgroud)

有七个参数:/usr/bin/ls,-I,README,-l,foo,bar car,和baz可访问$0$6.的-l-I被解释为选项,具有后者的参数(或的)README.剩下的是位置参数(foo,bar carbaz).

选项解析可以通过删除它所消耗的那些(例如使用shiftset)来改变参数列表,以便只保留位置参数,然后可以作为$1... 来访问$n.


joe*_*lom 6

由于问题被标记为“bash”,因此我在Bash 手册中查找了相关部分。我将这些内容列为下面引用的段落以及我自己的一句话总结。

\n

论据

\n

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

\n
\n

一个简单的 shell 命令由echo a b c命令本身组成,后跟参数,参数之间用空格分隔。

\n

简单命令是最常遇到的命令。它\xe2\x80\x99 只是一系列由空格分隔的单词,由 shell\xe2\x80\x99s 控制运算符之一终止(请参阅定义)。第一个字通常指定要执行的命令,其余字是该 command\xe2\x80\x99s 参数。

\n
\n

参数

\n

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

\n
\n

执行函数时,函数的参数在执行过程中成为位置参数

\n

参数是存储值的实体。它可以是名称、数字或下面列出的特殊字符之一。变量是由名称表示的参数。

\n

位置参数是由一个或多个数字表示的参数,而不是单个数字 0。位置参数在调用时从 shell\xe2\x80\x99s 参数分配,并且可以使用 set 内置命令重新分配。位置参数 N 可以引用为 ${N},或者当 N 由单个数字组成时引用为 $N。

\n
\n

选项

\n

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

\n
\n

-p 选项将输出格式更改为 POSIX 指定的格式

\n
\n