//foo 是个什么目录?
在 bash 下执行下面命令看看结果是什么
cd /tmp pwd cd //tmp pwd cd ///tmp pwd cd ////tmp pwd
/tmp //tmp /tmp /tmp
貌似中间混入了一个奇怪的东西 //tmp
,这是什么玩意?? 我们来看看它的 inode
stat //tmp
文件://tmp 大小:740 块:0 IO 块:4096 目录 设备:2dh/45d Inode:12972 硬链接:17 权限:(1777/drwxrwxrwt) Uid:( 0/ root) Gid:( 0/ root) 最近访问:2019-09-16 21:52:50.368212128 +0800 最近更改:2019-09-16 22:29:22.768083948 +0800 最近改动:2019-09-16 22:29:22.768083948 +0800 创建时间:-
可以看到 inode 为 12972,那么这个 inode 其实应该属于哪个文件呢?
find / -inum 12972;:
/tmp
你会发现 //tmp
其实就是 /tmp
,怎么会这样呢?根据 cd
的规范
An implementation may further simplify curpath by removing any trailing <slash> characters that are not also leading <slash> characters, replacing multiple non-leading consecutive <slash> characters with a single <slash>, and replacing three or more leading <slash> characters with a single <slash>. If, as a result of this canonicalization, the curpath variable is null, no further steps shall be taken.
总结起来就是几点:
- 路径最后的
/
可以被省略,即/foo//
可以简化成/foo
- 非首部的多个连续
/
可以被简化成一个/
,即/foo//bar
可以简化成/foo/bar
- 首部的三个或以上连续的
/
可以被简化成一个/
,即///foo
可以简化成/foo
- 首部是两个连续的
/
的情况没有定义,也就是可以有不同的实现方式
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论