`--`(双破折号)参数记录在哪里?

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 的火焰战争,它是一个有效的,而且我相信,有用的关注。

无论是catmved(我相信许多人)文件中的手册页这样的选择,我可以找到。

请注意,这./-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)。而特别内建不遵循的准则(如breakdotexec,等)

一些特殊的内置程序被描述为符合 XBD 实用程序语法指南。对于那些不是,实用程序描述默认值中将“--”识别为要丢弃的第一个参数的要求不适用,并且符合要求的应用程序不应使用该参数。

目的是记录所有不遵循 POSIX 手册页指南的命令,来自POSIX 章节 12.02第三段:

一些标准实用程序不符合所有这些准则;在这些情况下,选项部分描述了偏差。

由于catPOSIX手册页文档的选项部分没有偏差,但预计它接受--作为一个有效的论据。

仍然可能有(错误的)实现没有遵循指南。

特别是,大多数GNU 核心实用程序都遵循此准则

  • 安息吧,狡猾的 (4认同)
  • 好问题。Solaris `dd` 使用空的 `optstring` 调用 `getopt()`,这可以被视为暗示 Sun 认为 `dd` 应该支持它,因为他们添加了此调用以获得 XPG4 合规性。 (2认同)

ImH*_*ere 7

对于具有 GNU 用户空间的 Linux 操作系统:Debian、RedHat、Ubuntu、Mint 等(不是某些 BSD),GNU 通用实践很重要:

您问题中的实用程序列表的共同点是它们都是 GNU,实际上它们都是 GNU coreutils。在完整的GNU的coreutils名单是更长的时间。

大多数来自 GNU 的实用程序共享一个通用的用户界面和一组通用的基本命令行选项,例如--help,--version以及--作为选项结束信号的使用。

info commonGNU 网页上的条目包含:

所有这些程序都提供某些选项。不是为每个程序编写相同的描述,而是在此处进行描述。(事实上​​,每个 GNU 程序都接受(或应该接受)这些选项。)

'--'
分隔选项列表。后面的参数(如果有)被视为操作数,即使它们以“-”开头。例如,'sort -- -r' 从名为 -r 的文件中读取。

一个更精确(但不太容易解释和记忆)的命令--是(请准确复制)info -- cat --