我刚刚发现我的计算机文件系统有一个非常奇怪的功能(错误?)。我可以执行cd //
,它会转到//
目录,但显示与目录相同的所有文件/
。这是为什么?如果我cd ..
在 中/
,它会停留在/
。//
是唯一有效的方法——我尝试了多个斜杠,但它只是停留在 中/
。
答案1
来自POSIX 规范:
3.266:... 多个连续的斜线被视为与一个斜线相同。
4.11:... 以两个连续斜杠开头的路径名可以按照实现定义的方式进行解释,但两个以上的前导斜杠应被视为单个斜杠。
第二部分表示以 // 开头的路径可以具有特殊含义。这种情况很少使用,并且可能成为错误的根源:https://stackoverflow.com/a/7816833/163956。
答案2
看起来 Bash 会规范化路径名,但不会规范化路径名开头的双斜杠。这是可以理解的,因为在某些 Unix 系统上(但不是 Mac OS X),//
可能表示网络路径,而 Bash 旨在实现可移植性。请参阅这个问题在 Unix.SE 上存在双斜线问题。
由于在 Mac OS X 中//
没有特殊含义,因此您实际上是在/
。
答案3
// 和 / 之间没有区别。只是 bash 可以容忍多个斜杠。
请注意,您还可以在路径中使用//,它不会抱怨,并且它会像/一样对待它们。