这些术语之间的区别是:“选项”,“参数”和“参数”?在手册页中,这些术语通常看起来可以互换使用。
Answers:
甲命令被分成称为字符串数组参数。参数0(通常)是命令名称,参数1是命令后的第一个元素,依此类推。这些参数有时称为位置参数。
$ ls -la /tmp /var/tmp
arg0 = ls
arg1 = -la
arg2 = /tmp
arg3 = /var/tmp
一个选项是一个记录类型参数修改的行为命令,例如,-l
通常的意思是“长”,-v
冗长。-lv
是在单个参数中组合的两个选项。也有类似的长选项(另请参见使用getopts处理长和短命令行选项)。顾名思义,选项通常是可选的。但是,有些命令带有矛盾的“强制性选项”。--verbose
$ ls -la /tmp /var/tmp
option1= -l
option2= -a
甲参数是要么所述提供信息的参数命令或它的一个选项,例如在-o file
,文件是的参数-o
选项。与选项(可能的值在程序中用硬编码)不同,参数通常不是参数,因此用户可以自由使用适合其需要的任何字符串。如果您需要传递看起来像选项的参数,但不应这样解释,则可以将其与命令行的开头用双破折号分隔:--
。
$ ls -la /tmp /var/tmp
parameter1= /tmp
parameter2= /var/tmp
$ ls -l -- -a
option1 = -l
parameter1 = -a
一个shell参数是任何存储在外壳的背景值。这包括位置参数(例如$1
,$2
...),变量(例如$foo
,$bar
...)和特殊字符(例如$@
)
最后,还有子,也被称为功能/(低电平)的命令,这是与该嵌入多个单独的命令,如“元命令”使用busybox
,git
,apt-get
,openssl
,和喜欢。有了它们,您可能在子命令之前有全局选项,并且在子命令之后有特定于子命令的选项。与参数不同,可能的子命令列表在命令本身中是硬编码的。例如:
$ 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
请注意,某些命令喜欢test
,tar
,dd
并且find
具有比那些先前所描述的,可以有部分或全部它们的参数解析为更复杂的参数解析语法expressions
,operands
,keys
和类似命令的具体内容。
还请注意,尽管由外壳程序处理了代字号扩展,参数扩展,命令替换,算术扩展和引号删除等可选变量分配和重定向,但与其他命令行参数一样,这些变量也未考虑在内,因为当该命令实际上是被调用并传递其参数的。
VARNAME="VALUE"
语法在bash脚本中创建。如果不是(即VARNAME不是参数),那么为什么参数扩展的概念也适用于硬编码变量?
在man
一个典型的Unix命令页面经常使用的术语argument
,option
和parameter
。在最低级别上,我们拥有的argument
所有东西都是一个参数,包括(文件系统的路径)命令本身。
在一个shell脚本您使用的特殊变量访问参数$0
.. $n
。其他语言也有类似的访问方式(通常通过名称为的数组argv
)。
如果愿意,可以将参数解释为选项。如何完成此操作是特定于实现的。您可以自己滚动,例如,shellbash
脚本(例如)可以使用提供的命令getopts
或getopt
命令。
这些选项通常将选项定义为以连字符(-
)开头的参数,某些选项可能会将后续参数用作其参数。功能更强大的解析器(例如getopt
)支持混合短格式(-h
)和长格式(--help
)选项。
通常,大多数选项采用零或一个参数。这些参数有时也称为值。
支持的选项在程序代码中进行了编码(例如,getopts
在Shell脚本中的调用中)。该选项之后的任何剩余的参数都被消耗通常被称为位置参数,当它们被给出的顺序是显著(这是不同于通常可以以任意顺序给出的选项)。
同样,脚本通过使用和使用位置参数来定义位置参数。
所以一个典型的命令
$ ls -I README -l foo 'bar car' baz
有七个参数:/usr/bin/ls
,-I
,README
,-l
,foo
,bar car
,和baz
可访问$0
通$6
。的-l
和-I
被解释为选项,后者具有一个参数(或值)的README
。剩下的是位置参数(foo
,bar car
和baz
)。
选项解析可以通过删除参数列表(例如,使用shift
或set
)来更改参数列表,从而仅保留位置参数,然后以$1
..形式进行访问$n
。
由于该问题被标记为“ bash”,因此我在Bash手册中查找了相关章节。我在下面将这些引用的段落以及我自己的一句话摘要列出。
命令后面的所有内容都是自变量。
一个简单的shell命令,例如
echo a b c
由命令本身后跟参数(由空格分隔)组成。简单命令是最常遇到的命令。它只是一个由空格分隔的单词序列,由外壳程序的一个控制运算符终止(请参见定义)。通常,第一个单词指定要执行的命令,其余单词是该命令的参数。
在函数执行过程中,参数称为参数。
执行函数时,函数的参数将在执行过程中变为位置参数
参数是存储值的实体。它可以是名称,数字或下面列出的特殊字符之一。变量是用名称表示的参数。
位置参数是用一位或多位数字表示的参数,而不是一位数字0。位置参数是在调用Shell时从shell的参数中分配的,可以使用set builtin命令重新分配。位置参数N可以称为$ {N},或者当N由单个数字组成时称为$ N。
没有专门的章节来定义选项是什么,但是在本手册中,它们被称为连字符前缀字符。
-p选项将输出格式更改为POSIX指定的格式
argv
数组的形式传递,该字面量作为execv
-style syscall的参数给出,而根本不涉及任何shell。