我误输入了命令cd //
,而不是cd /
,但没有像我预期的那样出现错误提示,终端(Bash)显示的提示符好像我在//
目录下:
<username>@<hostname>://$
<username>@<hostname>://$ pwd
//
列出目录的内容,显示它与/
是相同的。
那么cd //
究竟做了什么,与cd /
有何区别?
我误输入了命令cd //
,而不是cd /
,但没有像我预期的那样出现错误提示,终端(Bash)显示的提示符好像我在//
目录下:
<username>@<hostname>://$
<username>@<hostname>://$ pwd
//
列出目录的内容,显示它与/
是相同的。
那么cd //
究竟做了什么,与cd /
有何区别?
实际上这个意味着什么都没有,会被忽略。
E10) 为什么 'cd //' 会让 $PWD 保持为 '//'?
POSIX.2 在其对 'cd' 的描述中表示,规范化当前工作目录时,三个或更多前导斜杠可以替换为单个斜杠。
我想,这是为了历史兼容性。某些版本的 Unix 和早期网络文件系统使用形如 //hostname/path 的路径来访问服务器 'hostname' 上的 'path'。
此外,Unix标准也指出:
以两个连续斜杠开头的路径名可能以一种实现定义的方式解释,尽管超过两个前导斜杠应被视为单个斜杠。
//
不代表什么。POSIX的定义是“可以按照实现定义的方式进行解释”,这意味着系统可以自由地处理它。例如,在Cygwin上,cd //
然后跟随 ls
最终会返回 ls: reading directory '.': Permission denied
。而 cd /
然后跟随 ls
则返回根目录的列表。(Cygwin使用 //
作为根目录来识别 //hostname/path。) - roaima此回答 证实它们是同一目录。此外,它还引用了POSIX路径解析规范:
仅包含单个斜线的路径名将被解析为进程根目录。空路径名无法成功解析。以两个相继斜线开头的路径名可以按照实现定义的方式进行解释,但超过两个前导斜线将视为单个斜线。
pwd
会记住您输入的字符串(但在某些情况下会进行规范化)。/bin/pwd
根据当前目录的位置推断出完整路径,必要时遍历..
链接,并仅打印/
。 - Keith Thompson