ImH*_*ere 53 shell documentation options
有一些实用程序接受--
(双破折号)作为“选项结束”的信号,当文件名以破折号开头时需要:
$ echo "Hello World!" >-file
$ cat -- -file
Hello World!
$ cat -file # cat - -file fails in the same way.
cat: invalid option -- 'f'
Try 'cat --help' for more information.
Run Code Online (Sandbox Code Playgroud)
但是其中一些实用程序在手册页中没有显示这样的选项。
该man
页面cat
没有一个文件的使用(或有效性)--
的说法在任何OS'es的。这并不意味着是 Unix-Linux 的火焰战争,它是一个有效的,而且我相信,有用的关注。
无论是cat
,mv
,ed
(我相信许多人)文件中的手册页这样的选择,我可以找到。
请注意,这./-file
是使用--
. 例如,source
(dot) 命令(并写为.
)(通常)不适用于--
参数:
$ echo 'echo "Hello World!"' >-file
$ . ./-file
Hello World!
$ . -file
ksh: .: -f: unknown option
ksh: .: -i: unknown option
ksh: .: -l: unknown option
ksh: .: -e: unknown option
Usage: . [ options ] name [arg ...]
$ . -- -file # works in bash. Not in dash, ksh, zsh.
ksh: .: -file: cannot open [No such file or directory]
Run Code Online (Sandbox Code Playgroud)
sch*_*ily 74
这是所有实用程序的 POSIX 要求,有关更多信息,请参阅POSIX 第 12.02 章,指南 10:
第一个--不是选项参数的参数应该被接受为指示选项结束的分隔符。任何后续参数都应视为操作数,即使它们以
'-'
字符开头。
POSIX 建议所有实用程序都遵循这些准则。
有一些例外,例如echo
(阅读 OPTIONS)。而特别内建不遵循的准则(如break
,dot
,exec
,等):
一些特殊的内置程序被描述为符合 XBD 实用程序语法指南。对于那些不是,实用程序描述默认值中将“--”识别为要丢弃的第一个参数的要求不适用,并且符合要求的应用程序不应使用该参数。
目的是记录所有不遵循 POSIX 手册页指南的命令,来自POSIX 章节 12.02第三段:
一些标准实用程序不符合所有这些准则;在这些情况下,选项部分描述了偏差。
由于该cat
POSIX手册页文档的选项部分没有偏差,但预计它接受--
作为一个有效的论据。
仍然可能有(错误的)实现没有遵循指南。
特别是,大多数GNU 核心实用程序都遵循此准则
对于具有 GNU 用户空间的 Linux 操作系统:Debian、RedHat、Ubuntu、Mint 等(不是某些 BSD),GNU 通用实践很重要:
您问题中的实用程序列表的共同点是它们都是 GNU,实际上它们都是 GNU coreutils。在完整的GNU的coreutils名单是更长的时间。
大多数来自 GNU 的实用程序共享一个通用的用户界面和一组通用的基本命令行选项,例如--help
,--version
以及--
作为选项结束信号的使用。
info common
和GNU 网页上的条目包含:
所有这些程序都提供某些选项。不是为每个程序编写相同的描述,而是在此处进行描述。(事实上,每个 GNU 程序都接受(或应该接受)这些选项。)
'--'
分隔选项列表。后面的参数(如果有)被视为操作数,即使它们以“-”开头。例如,'sort -- -r' 从名为 -r 的文件中读取。
一个更精确(但不太容易解释和记忆)的命令--
是(请准确复制)info -- cat --
。