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


23

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

command -- 

--是什么意思?


什么视频教程?
TheWanderer '16


实际上,令我惊讶的是,这个问题还不是对非盟的欺骗。其他StackExchange社区上的相同问题是否不算作重复(即@edwinksl给出的链接)?这是怎么回事?也许我应该在META上问这个问题。–
Cbhihe

@Cbhihe我不知道有一种机制可以使我们指向其他SE网站的重复目标。无论如何,它不会经常发生,因此可能不需要。
edwinksl

3
@ anonymous2为什么我们要这样做?问题是这里的主题,因此可以保留。移动它会从AU中删除信息,并且不会给U&L添加任何新内容,因此我不明白为什么这会是一件好事。
terdon '16

Answers:


46

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

$ > '--foo'
$ ls
--foo

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

$ rm --foo 
rm: unrecognized option '--foo'
Try 'rm ./--foo' to remove the file '--foo'.
Try 'rm --help' for more information.

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

$ rm -- --foo

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


13
Bash根本没有实现它。它rm程序的功能,也是许多POSIX兼容实用程序的功能。参见准则10。要实际检查是不是Bash在做这项工作(那是没有意义的),只需使用just创建一个小脚本,printf '> %s <\n' "$@"然后使用启动它--
gniourf_gniourf

3
@gniourf_gniourf d'哦!我确实通过编写一个小的perl脚本来进行检查,该脚本打印了它的选项,如果您将其传递给它,它也看不到任何东西--,但这当然是因为相关的Perl模块(getopts)也支持它。您说得对,我很快就进行了搜索man bash,看到了我引用的部分,但是没有注意到它在“命令行选项”部分中。多谢改正,答案已编辑。
terdon '16

1

大多数命令将使用-来告诉命令应进一步区别对待其他参数。一个例子是上面提到的rm---filename。再举一个例子,像'startx'这样的脚本将解释-之前的所有内容,并将其之后的所有内容传递给X服务器。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.