可能的重复:
“--”(双破折号)是什么意思?
谁能解释一下下面的事情
我有名为“-xyz”的文件。如果我尝试使用命令行删除或移动该文件,它无法移动。我尝试了以下事情:
[rahul@srv100 ~]# ls -lrt -- "-xyz"
-rw-r--r-- 1 rahul rahul 0 Dec 19 08:06 -xyz
[rahul@srv100 ~]# mv "-xyz" xyz
mv: invalid option -- x
Try `mv --help' for more information.
[rahul@srv100 ~]# mv \-xyz xyz
mv: invalid option -- x
Try `mv --help' for more information.
[rahul@srv100 ~]# mv -\xyz xyz
mv: invalid option -- x
Try `mv --help' for more information.
[rahul@srv100 ~]# mv '-xyz' xyz
mv: invalid option -- x
Try `mv --help' for more information.
最后我使用winscp重命名该文件,在尝试多种方法后我得到了一个选项并且它正在工作。
mv -- '-xyz' xyz
希望“--”的帮助,我创建了如下文件/目录
mkdir -- --abc
touch -- -xyz
所以我的问题是 bash 中的“--”是什么?请解释。
答案1
正如其他人已经提到的那样,--
用于将选项与参数分隔开。如果执行程序并指定任何参数,则程序无法区分指定的参数是否应解释为命令行选项或参数。这就是为什么在 Windows 上引入选项前缀-
/--
或/
,即-rf
,--help
或/?
由于您可能有以这样的前缀或任何其他可以解释的特殊名称开头的文件,因此--
引入了将命令行选项与普通参数分隔开的功能,即后面的每个参数--
都不会被视为命令行选项,而只是作为参数。getopt (1)
,解析参数的标准解决方案,例如支持--
分隔符,这意味着任何使用的程序都会getopt
自动支持--
分隔符。
如果您想处理以特殊字符开头的文件,-
您也可以./
在它们前面添加,因为它们现在不以特殊字符开头,-
因此它们不会被解释为命令行选项,对于您的示例,它是mkdir ./--abc
答案2
这用于告诉命令,此后不再接受任何命令选项。
所以
rm ---abc
意味着它将忽略 abc 中的 - 。
答案3
它指示各个命令停止将进一步的命令行参数解释为选项。