gpt4 book ai didi

bash - 术语 : "option", "argument"和 "parameter"之间的区别?

转载 作者:行者123 更新时间:2023-11-29 08:40:46 25 4
gpt4 key购买 nike

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

最佳答案

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

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

选项 是一种记录1 类型的参数,用于修改命令 的行为,例如-l 通常表示“长”,-v 表示冗长。 -lv两个 选项组合在一个单个 参数中。还有long options--verbose (另见 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选项的参数。与可能的值在程序中硬编码的选项不同,参数通常不是,因此用户可以自由使用适合他/她需要的任何字符串。如果您需要传递一个看起来像选项但不应被解释为选项的参数,您可以使用双破折号将其与命令行的开头分开:--2 .

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

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

A shell parameter 是在 shell 上下文中存储值的任何东西。这包括位置参数(例如 $1$2...)、变量(例如 $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 双划线功能需要由程序实现。

关于bash - 术语 : "option", "argument"和 "parameter"之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36495669/

25 4 0