在Linux中,`cd //` 中的双斜杠 // 是什么意思?

56

我误输入了命令cd //,而不是cd /,但没有像我预期的那样出现错误提示,终端(Bash)显示的提示符好像我在//目录下:

<username>@<hostname>://$
<username>@<hostname>://$ pwd
//

列出目录的内容,显示它与/是相同的。

那么cd //究竟做了什么,与cd /有何区别?


5
没有区别。试一下“//////////”,同样有效。 - Ernest Friedman-Hill
2
"//////////" 可以正常工作,但只有一个 '/' 时会得到不同的提示。 - vitaut
8
这属于Linux范畴,这里明显不是合适的讨论地点。 - Ernest Friedman-Hill
1
bash内置命令 pwd会记住您输入的字符串(但在某些情况下会进行规范化)。 /bin/pwd根据当前目录的位置推断出完整路径,必要时遍历..链接,并仅打印/ - Keith Thompson
2个回答

62

实际上这个意味着什么都没有,会被忽略。

来自 Bash FAQ E10:

E10) 为什么 'cd //' 会让 $PWD 保持为 '//'?

POSIX.2 在其对 'cd' 的描述中表示,规范化当前工作目录时,三个或更多前导斜杠可以替换为单个斜杠。

我想,这是为了历史兼容性。某些版本的 Unix 和早期网络文件系统使用形如 //hostname/path 的路径来访问服务器 'hostname' 上的 'path'。

此外,Unix标准也指出:

以两个连续斜杠开头的路径名可能以一种实现定义的方式解释,尽管超过两个前导斜杠应被视为单个斜杠。


1
// 不代表什么。POSIX的定义是“可以按照实现定义的方式进行解释”,这意味着系统可以自由地处理它。例如,在Cygwin上,cd // 然后跟随 ls最终会返回 ls: reading directory '.': Permission denied。而 cd / 然后跟随 ls 则返回根目录的列表。(Cygwin使用 // 作为根目录来识别 //hostname/path。) - roaima

21

此回答 证实它们是同一目录。此外,它还引用了POSIX路径解析规范

  

仅包含单个斜线的路径名将被解析为进程根目录。空路径名无法成功解析。以两个相继斜线开头的路径名可以按照实现定义的方式进行解释,但超过两个前导斜线将视为单个斜线。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接