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冗长.-lv是2级的选项合并于一个单一的参数.还有很长的选择--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,git并apt-get具有比之前所描述的更复杂的参数解析语法,有部分或全部它们的参数解析为openssl,test,tar和类似命令的具体内容.
在man一个典型的Unix命令页面经常使用的术语argument,option和parameter.在最低级别,我们拥有argument并且所有内容都是参数,包括(文件系统路径)命令本身.
在一个shell脚本您使用的特殊变量访问参数$0.. $n.其他语言有类似的方式来访问它们(通常通过名称相似的数组argv).
如果您愿意,可以将参数解释为选项.如何做到这一点是特定于实现的.您可以自己滚动,例如shell(例如bash)脚本可以使用提供的getopts或getopt命令.
这些通常将选项定义为以连字符(-)开头的参数,并且某些选项可以使用前进参数作为其参数.更强大的解析器(例如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 car和baz).
选项解析可以通过删除它所消耗的那些(例如使用shift或set)来改变参数列表,以便只保留位置参数,然后可以作为$1... 来访问$n.
由于问题被标记为“bash”,因此我在Bash 手册中查找了相关部分。我将这些内容列为下面引用的段落以及我自己的一句话总结。
\n命令后面的所有内容都是参数。
\n\n\n一个简单的 shell 命令由
\necho a b c命令本身组成,后跟参数,参数之间用空格分隔。简单命令是最常遇到的命令。它\xe2\x80\x99 只是一系列由空格分隔的单词,由 shell\xe2\x80\x99s 控制运算符之一终止(请参阅定义)。第一个字通常指定要执行的命令,其余字是该 command\xe2\x80\x99s 参数。
\n
参数在函数执行期间称为参数。
\n\n\n执行函数时,函数的参数在执行过程中成为位置参数
\n参数是存储值的实体。它可以是名称、数字或下面列出的特殊字符之一。变量是由名称表示的参数。
\n位置参数是由一个或多个数字表示的参数,而不是单个数字 0。位置参数在调用时从 shell\xe2\x80\x99s 参数分配,并且可以使用 set 内置命令重新分配。位置参数 N 可以引用为 ${N},或者当 N 由单个数字组成时引用为 $N。
\n
没有专门的部分来定义选项是什么,但它们在整个手册中被称为连字符前缀字符。
\n\n\n-p 选项将输出格式更改为 POSIX 指定的格式
\n