我正在处理的这个项目有一些 Windows Perl 代码,用于设置
dirname(__FILE__) . "../../../../"
的路径。这段代码已经工作了几年了,但我意识到它实际上应该是 3 个 ..
: dirname(__FILE__) . "/../../../"
才能获得我们需要的路径。不过,该路径确实解析到了正确的位置。 Perl 中路径的组合方式是 ..\dir1\dir2../../../../
。 dir2..
看起来不太对,但是:
> Test-Path ..\dir1\dir2..
True
> Test-Path ..\dir1\dir2..\
False
> Test-Path ..\dir1\dir2..\..\
True
PowerShell 是如何解析这里的路径的?命令提示符显示相同的行为。
在 Windows 路径中,
..
表示“父目录”。因此,anything\..
等同于 .
。没有理由检查 anything
是否存在。
C:\>dir /b nonexistent\..\Windows\explorer.exe
explorer.exe
顺便说一句,这在 unix 中不起作用,因为它不会特殊对待
..
。它在磁盘上查找,通常是到父目录的硬链接。
/$ ls -d nonexistent/../usr
ls: cannot access 'nonexistent/../usr': No such file or directory
/$ ls -d home/../usr
home/../usr
/$ realpath home/../usr
/usr