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

时间:2016-04-08 09:07:09

标签: bash shell parameters arguments option

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

3 个答案:

答案 0 :(得分:73)

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

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

选项是记录的参数类型,用于修改命令的行为,例如: -l通常表示“长”,-v详细。 -lv单个参数中的两个选项。还有很长的选项,例如--verbose。顾名思义,选项通常是可选的。然而,有些命令带有矛盾的“强制性选项”。

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

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

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

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

最后,还有子命令,也称为函数/(低级)命令,它们与“metacommands”一起使用,它嵌入了多个单独的命令,如busybox,{{ 1}},gitapt-get等。使用它们,您可以在子命令之前使用全局选项,并在子命令之后使用子命令特定选项。与参数不同,可能的子命令列表在命令本身中是硬编码的。 e.g:

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 testtardd具有比前面描述的更复杂的参数解析语法,并且可能具有部分或全部参数解析为findexpressionsoperands和类似的命令特定组件。

答案 1 :(得分:7)

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

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

如果您愿意,参数可以解释为选项。如何做到这一点是特定于实现的。您可以自己推送,例如bash}脚本可以使用提供的getoptsgetopt命令。

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

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

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

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

这是一个典型的命令

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

有七个参数:/usr/bin/ls-IREADME-lfoobar carbaz可访问作为$0$6-l-I被解释为选项,后者的{em>参数(或)为{{ 1}}。剩下的是位置参数READMEfoobar car)。

选项解析可以通过删除它所消耗的参数列表来改变参数列表(例如,使用bazshift),以便只保留位置参数,然后可以set ... { {1}}。

答案 2 :(得分:0)

由于该问题被标记为“ bash”,因此我在the Bash manual中查找了相关章节。我在下面将这些作为引用的段落列出,并附上我自己的一句话摘要。

参数

命令后面的所有内容都是自变量。

  

简单的shell命令(例如echo a b c)由命令本身和后跟参数(由空格分隔)组成。

     

简单命令是最常遇到的命令。它只是一个由空格分隔的单词序列,由外壳程序的一个控制运算符终止(请参见定义)。通常,第一个单词指定要执行的命令,其余的作为该命令的参数。

参数

在函数执行过程中,参数称为参数。

  

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

     

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

     

位置参数是用一位或多位数字表示的参数,而不是一位数字0。位置参数是在调用Shell时从外壳参数中分配的,可以使用set buildin命令重新分配。位置参数N可以称为$ {N},或者当N由单个数字组成时称为$ N。

选项

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

  

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