为何MSYS2 bash中Win32路径遍历时不会解析目录链接?
差异原因解释
两种路径的解析逻辑完全不同,核心是MSYS2运行时和Windows原生API对路径处理的规则差异:
- 当你使用
A/B/..这类POSIX风格正斜杠路径时,MSYS2的运行时(继承自Cygwin架构)会先遵循POSIX规范自行完成路径规范化:会先跟随目录交接点A/B解析到它的目标路径M/N,再处理..相对路径段,最终解析结果为M/目录,因此列出的内容是M下的N和O。 - 当你使用
A\B\..这类*Win32风格反斜杠路径(或带盘符的Win32路径)*时,MSYS2不会自行处理路径解析,会直接将路径传递给Windows原生Win32 API执行解析。而Windows原生的路径规范化规则中,处理..时不会跟随目录交接点/符号链接,直接按路径字符串的层级向上回溯:A\B\..会被直接判定为A目录,因此列出的内容是A下的B和C。
你观测到的PowerShell输出和Win32路径场景一致的现象也符合该逻辑:PowerShell是Windows原生程序,所有路径处理默认调用Win32 API,因此默认遵循Windows的路径解析规则。
内容的提问来源于stack exchange,提问作者MikeMike
相关产品推荐
相关产品推荐

