我试图理解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 bar
或foo --option bar
。如果选项-o
(或--option
)带有参数,则是选项(或)bar
的参数。如果(或) 不带参数,则是操作数。-o
--option
-o
--option
bar
这是一个更长的例子:
tail -n 3 myfile
-n
是一个选项,3
是选项的参数-n
,myfile
是操作数。
术语不同,因此您可能会找到使用以下内容的文档争论在 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