路径`//`在Linux中代表哪个目录?

Sum*_*Tea 13 linux bash shell command-line prompt

当我想通过键入 返回到 Linux 中的上层目录时cd ..,我输入了cd //. 令我惊讶的是,没有报告任何错误。更重要的是,提示变为username@hostname://$. ls表示我现在在根目录。

这是一个错误还是 shell 的一个特性?如果一个要素,是//的别名/?我的 shell 是 GNU bash,版本 4.1.5(1)-release (i686-linux-gnu)。

谢谢和最好的问候。

use*_*686 30

也可以考虑。

在 Linux 中,//没有任何意义——多个连续的斜杠在路径中的任何位置折叠为一个,包括开头。将目录更改为//将您放入/,正如运行所显示的readlink /proc/self/cwd那样;同样,/usr//local///bin折叠为/usr/local/bin

但是,其他一些类 Unix 系统,例如 Cygwin 或旧的 Apollo Domain/OS,使用// 前缀作为网络路径,例如//fileserver/path/to/data. POSIX 也允许这样做。

由于各种原因,bash shell 自行跟踪当前目录(除了操作系统提供的跟踪),并且其中包含防止初始目录//折叠的代码,以保持与此类系统的兼容。“特性”是bash提供了对当前目录更直观的跟踪,例如,当cd进入符号链接时,bash会向您显示您期望的路径,即使内核不这么认为。“错误”是bash允许//甚至在不使用它的系统上。


Sha*_*dok 9

从 POSIX 路径名定义:

路径名可以选择包含一个或多个尾部斜杠。多个连续的斜线被认为与一个斜线相同。

来源

更准确地说,正如他在下面的评论中提到的那样,来自4.11路径名解析一章

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