如何"/a/./b/../../c/"
等于/c
?
我在 Stack Exchange 网站之一上看到了这个问题。显然..
意味着弹出堆栈(?)。为什么会这样呢?
答案1
假设根看起来像:
/a/b
/c
让我们将其分解为组件:
/
-> root
/a
-> in (a)
.
-> THIS dir path
/a/./
-> still in /a
/a/./b
-> in /a/b
..
-> go“up”一级
/a/./b/..
-> /a/b/..
-> /a
/a/./b/../..
-> /a/..
-> /
/a/./b/../../c
->/c
答案2
在 *nix 世界中,每个目录都是父目录的子目录。每个目录都有一个隐式的“.”引用自身的目录,以及引用其父目录的隐式“..”目录。因此,如果您位于特定目录中,并且您改变目录(cd
) 到 '。' (以“$”开头的命令可以在命令行上运行!),您将保留在同一目录中:
$ pwd
/tmp/a/b
$ cd .
$ pwd
/tmp/a/b
但是将目录更改为“..”会上升一位:
$ cd ..
$ pwd
/tmp/a
将目录更改为“..”再次上升:
$ cd ..
$ pwd
/tmp
此规则的唯一例外目录是根目录,它没有父目录:
$ cd ..
$ pwd
/
$ cd ..
$ pwd
/
查看本教程介绍 Unix 目录更多细节。
答案3
/ 是你的根目录。它的目录结构如下:
/
___ /c
___ /a
______/b (child dir of a)
___ /other dirs
现在,一个点。表示同一个目录,双点(..)表示父目录。
因此,在您的示例中,当您在路径中使用 . 时,它会停留在同一目录中,而当您使用 .. 时,它会跳回其父目录。因此,最终通过向上跳转,它会到达根目录 (/),因此它相当于 /c