未给定参数时的默认操作cd
是移动到$HOME
变量给定的目录。这是POSIX 强制要求的:
如果没有给出目录操作数并且 HOME 环境变量为空或未定义,则默认行为是实现定义的,并且不应采取进一步的步骤。
现在,它--
也是一个 POSIX 功能,许多工具都使用它来指示选项的结束。这对于处理以-
例如开头的名称非常有用。例如,在这个目录中,我有一个名为-a
:
$ ls
-a
Run Code Online (Sandbox Code Playgroud)
如果我尝试cat
这样做,我会得到:
$ cat -a
cat: invalid option -- 'a'
Try 'cat --help' for more information.
Run Code Online (Sandbox Code Playgroud)
这就是--
出现的地方:
$ cat -- -a
These are the contents of file -a!
Run Code Online (Sandbox Code Playgroud)
所以,在你的例子中,你只是cd
跟着--
运行来表示参数的结束,这转化为cd
没有参数的运行。结果就是你$HOME
就像cd
一个人跑步一样进入了你的状态,如果你已经进入了$HOME
,那么看起来好像什么都没有改变。$ grep foo -a
我假设你实际上运行了cd --
而不是cd--
因为后者会给出更清晰的错误:
$ cd--
bash: cd--: command not found
Run Code Online (Sandbox Code Playgroud)
除非您有自己的脚本或函数,cd--
在这种情况下我们无法知道发生了什么,但您会知道。