终端命令中的“--”是什么意思?

Jib*_*ril 25 command-line

我看过很多使用--after 命令的教程。像这样的东西:

command -- 
Run Code Online (Sandbox Code Playgroud)

--是什么意思?

ter*_*don 47

所述--用于指示的命令行选项的结束。这使您可以使用以 开头的参数--。例如,如果您创建一个名为 的文件--foo

$ > '--foo'
$ ls
--foo
Run Code Online (Sandbox Code Playgroud)

然后尝试删除它,rm会认为你在给它一个参数:

$ rm --foo 
rm: unrecognized option '--foo'
Try 'rm ./--foo' to remove the file '--foo'.
Try 'rm --help' for more information.
Run Code Online (Sandbox Code Playgroud)

解决此问题的一种方法是使用--

$ rm -- --foo
Run Code Online (Sandbox Code Playgroud)

这是POSIX 推荐的常见做法,因此受到许多程序的支持。

  • 它根本不是由 Bash 实现的。它是 `rm` 程序和许多符合 POSIX 的实用程序的一个特性。参见 [指南 10](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02)。要实际检查它不是 Bash 做的工作(这没有意义),只需创建一个小脚本,其中包含 `printf'> %s <\n' "$@"` 并使用 `- -`。 (13认同)
  • @gniourf_gniourf 哦!我确实通过编写一个打印其选项的小 perl 脚本进行了检查,如果您向它传递一个 `--`,它就看不到任何内容,但是,当然,这仅仅是因为相关的 Perl 模块(`getopts`)也支持它. 你说得对,我只是快速搜索了`man bash`,看到了我引用的部分,但没有注意到它在“命令行选项”部分。感谢您的更正,答案已编辑。 (3认同)