什么是“非选项论证”?

什么是“非选项论证”?

我试图理解info who但完全不明白这个词“非选项论证”。有人可以用简单的词语或例子向我解释这个术语吗?

更新: 从info who

如果给定没有非选项参数who打印当前登录的每个用户的以下信息:登录名、终端线路、登录时间和远程主机名或 X 显示。

如果给定一个非选项参数who使用它而不是默认的系统维护文件(通常/var/run/utmp是 或/etc/utmp)作为包含登录用户记录的文件的名称。 /var/log/wtmp通常作为参数来who查看谁以前登录过。

如果给定两个非选项参数who仅打印运行它的用户的条目(根据其标准输入确定),前面是主机名。传统上,给出的两个参数是am i,如who am i

我[想]知道参数和选项之间的区别,但这[再次]否定了很多。

答案1

术语并不完全固定,因此不同的文档使用不同的术语,或更糟糕的是,相同的术语具有不同的含义。您正在阅读的手册页中的术语是常用术语。这是在POSIX标准。简而言之,命令后面的每个单词都是一个参数,以 开头的参数-是选项。

争论

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

操作数

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

选项

命令的参数,通常用于指定实用程序默认行为的更改。

“实用程序”就是通常所说的“命令”(标准使用这个词公用事业以避免与包含参数甚至复合 shell 命令的“命令”含义产生歧义)。

大多数命令遵循标准实用程序参数语法,其中选项以 a -(破折号又名减号)开头。因此,选项类似于-a(短选项,遵循 POSIX 准则)或--all(长选项,GNU 的扩展)。非选项参数是不以 开头的参数-,或者仅由以下组成-(将其who视为文字文件名,但许多命令将其视为标准输入或标准输出)。

另外,有些选项本身就有争论。该参数可以通过多种方式传递:

  • 对于单字母选项,在实用程序的同一参数中:foo -obar:bar是单字母选项 的参数-o
  • 在 GNU 长参数语法中,在同一参数中,用等号分隔:foo --option=bar
  • 在单独的参数中:foo -o barfoo --option bar。如果选项-o(或--option)带有参数,则是选项(或)bar的参数。如果(或) 不带参数,则是操作数。-o--option-o--optionbar

这是一个更长的例子:

tail -n 3 myfile

-n是一个选项,3是选项的参数-nmyfile是操作数。

术语不同,因此您可能会找到使用以下内容的文档争论在 POSIX 使用的意义上操作数。但“非选项论证”比这个含义中的任何一个术语都更常见。

答案2

问题是,选项(或开关或标志,无论你如何称呼它们)也算作参数。事实上,您在命令名称本身之后提供的任何内容都构成了命令的参数(例如 shell 使用的结构(例如重定向))。

您的程序/脚本接收所有内容作为参数,并且需要将选项参数(作为选项的参数)与其他参数分开...您猜对了!...非选项参数

因此,信息页面的意思是,如果who接收到的参数不是一个选项,它将考虑将其作为其查询登录信息的默认文件的替代方案。

答案3

我仍然认为这方面的措辞很差,并且会尽量不要挂断。他们想说的是,在原型声明中他们包含这样的内容:

 `who' [OPTION] [FILE] [am i]

因此,当他们说“如果没有给出非选项参数”时,他们指的是[FILE][am i]

遵循这一逻辑,当他们说“如果给定一个非选项参数”时,即[FILE],那么您将覆盖该[FILE]位置,/var/run/utmp

最后,对于此评论,“如果给出两个非选项参数”,即[am i]您要求提供有关刚刚运行该命令的用户的信息:

$ who am i
saml     pts/5        2013-10-18 16:29 (:0.0)

-or-

$ who mom likes
saml     pts/5        2013-10-18 16:29 (:0.0)

这个描述很恰当,但他们肯定通过使用术语“没有非选项参数”来混淆它。

在作者看来,有以下几种选择:

  -a, --all         same as -b -d --login -p -r -t -T -u
  -b, --boot        time of last system boot
  -d, --dead        print dead processes
  -H, --heading     print line of column headings
  -l, --login       print system login processes
      --lookup      attempt to canonicalize hostnames via DNS

  ....

and[FILE][am i]是非[mom likes]选项。但这些都是全部选项,因此差异仅限于此工具!

答案4

通常非选项参数

  • 遵循命令行字符串中的命令
  • 不以-或开头--
  • 不遵循需要参数的选项
  • (如果是命令字符串的一部分)通常是唯一必需的参数

例子:

           option    non-option arg
command  --verbose   /dir/file.txt

或者:

          option    argument of -o    non-option arg
command     -o          /dst          /src/file.txt

区分论证和非选项容易吗?。这取决于具体命令如何解析选项,因此需要阅读其文档:

            option     argument of -a
command_A    -a        /dir/file.txt

            option     non-option arg
command_B    -a        /dir/file.txt

注意:在极少数情况下,非选项以-:开头

      non-option arg   non-option arg
set         --              -a

相关内容