如何区分位置参数和选项?

3 options parameter terminology arguments

位置参数($1$2等)和选项(和/或参数)都直接写在命令之后,那么解释如何区分它们的定义或措辞是什么?

换句话说,如何正式解释位置参数选项(和/或参数)之间的区别?

Kus*_*nda 13

选项(通常也称为“标志”或“开关”)是一种命令行参数。命令行参数是出现在实用程序或 shell 函数的命令行上的单个单词(或带引号的字符串)。

在使用一定数量的参数调用 shell 脚本或 shell 函数时,每个单独的参数都将作为脚本或函数内的位置参数可用。

术语:

“论据”可以是

  • 一个“选项”(如-a,但前提是实用程序将其识别为选项),
  • 一个“选项形式参数”(如foo-a foo如果-a是接受一个参数的选项),或
  • “操作数”(非选项参数,也不是选项参数,例如foo-a fooif-a采用选项参数)。

以上所有的真实示例(使用 GNU mv):

mv -t targetdir -f file1 file2
Run Code Online (Sandbox Code Playgroud)
  • 参数:-t, targetdir, -f, file1, 和file2
  • 选项:-t-f
  • 选项参数: targetdir
  • 操作数:file1file2

POSIX 定义

[在] shell 命令语言中,参数是传递给实用程序的参数,相当于由 exec 函数之一创建的 argv 数组中的单个字符串。参数是命令名称后面的选项、选项参数或操作数之一。

[An option is an] 命令的参数,通常用于指定实用程序默认行为的更改。

[选项参数是] 跟随某些选项的参数。在某些情况下,选项参数包含在与选项相同的参数字符串中 - 在大多数情况下,它是下一个参数。

[操作数是]命令的参数,该命令通常用作向实用程序提供完成其处理所需的信息的对象。操作数通常遵循命令行中的选项。

shell 脚本或 shell 函数中的位置参数将是脚本或函数命令行上给出的参数,无论参数是选项、选项参数还是操作数。

位置参数也可以使用

set -- something "something else" bumblebees
Run Code Online (Sandbox Code Playgroud)

这会将$1,$2$3设置为三个字符串并清除任何其他位置参数。

在这种情况下,位置参数不再与实用程序命令行上传递的参数有任何关系。

也可以看看: