双根文件夹与单根文件夹


14

在我的Linux机器上的bash中,我可以访问一个用两个正斜杠表示的“双根”文件夹:

tomas:~ $ cd /
tomas:/ $ ls
bin/ cdrom@ ...
tomas:/ $ cd //
tomas:// $ ls 
bin/ cdrom@ ...

该文件夹及其子文件夹的内容与“常规”单斜杠根目录相同。当我访问其子文件夹时,双斜杠不会消失。异常不会以三个或三个以上的斜线重复。这些是根的简单同义词:

tomas:// $ cd home/tomas
tomas://home/tomas $ cd ///
tomas:/ $ cd ////
tomas:/ $

这是什么地方?是虫子吗?谁能解释这个异常?


好问题-我注意到相同的行为,但从未问过为什么会这样。
lajuette

Answers:


18

Bash常见问题E10

E10)为什么“ cd //”将$ PWD保留为“ //”?

POSIX.2在对“ cd”的描述中说,当规范当前工作目录时,可以用单个斜杠替换三个或更多的前导斜杠。

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


1
域/操作系统就是这样一种系统。
user1686'9

1
仍然使用双斜杠。它是通用(或统一;我似乎找不到主要来源)命名约定或UNC的一部分。它出现在Windows,Unix和Linux中。碰巧是在URL中使用双斜杠的原因。
艾萨克·拉比诺维奇

1

“这不是一个错误,这是一个功能!”

您仍在同一根目录中。我不知道它的起源,但是怀疑它可能与为绝对路径构建字符串有关。如果其他人肯定知道,请准备。


0

所使用的工具只会忽略多个斜杠,并且始终会进入相同的根文件夹。


那么为什么bash会// ///变成/,而//保持原样?
Tomas 2010年

0

出于路径名解析的目的,多个斜杠被视为单个斜杠。

在shell提示符中看到的是bash PS1处理的工件(请参见bash联机帮助页中的“ PROMPTING”部分)。

[root@linux /]# cd /    ; echo $PWD
/
[root@linux /]# cd //   ; echo $PWD
//
[root@linux //]# cd /// ; echo $PWD
/
[root@linux /]# cd //// ; echo $PWD
/

结果只是表示问题;您始终位于同一根目录中。您可以通过查看进行检查/proc/$$/root

[edit]好吧,我从来都不知道:http : //www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11 “ //”的含义在标准中没有定义,但是“ ///”和更多的斜杠等效于“ /”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.