在我的 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:/ $
这是什么地方?是 bug 吗?有人能解释一下这个异常吗?
答案1
E10)为什么 'cd //' 会让 $PWD 保留为 '//'?
POSIX.2 在对 'cd' 的描述中说三在规范化当前工作目录时,可以将多个前导斜杠替换为单个斜杠。
我推测这是为了历史兼容性。某些版本的 Unix 和早期的网络文件系统使用 //hostname/path 形式的路径来访问服务器“hostname”上的“path”。
答案2
“这不是一个错误,这是一个功能!”
您仍然在同一个根目录中。我不知道这是什么原因,但怀疑这可能与构建绝对路径的字符串有关。如果其他人知道确切原因,请告诉我。
答案3
您使用的工具会忽略多个斜杠,并且您始终会进入同一个根文件夹。
答案4
为了路径名解析的目的,多个斜杠将被视为单个斜杠。
您在 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
。
[编辑] 我从来不知道这个: http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11 标准没有定义“//”的含义,但是“///”和更多斜线等同于“/”。