我使用 SBCL 1.1.4,发现 pathname-directory 的行为很奇怪:
假设有一个路径名包含“..”,下面的例子很简单。SBCL 将每个 ".." 转换为 ":UP"
(pathname-directory "a/b/../")
(:RELATIVE "a" "b" :UP)
(pathname-directory "a/../b/../")
(:RELATIVE "a" :UP "b" :UP)
问题来了:
(pathname-directory "C:/test/../")
;;=> (:ABSOLUTE "test" :UP)
(truename "C:/test/..")
#P"C:/test/../"
(pathname-directory (truename "C:/test/.."))
;;=> (:ABSOLUTE "test" "..")
(pathname-directory #P"C:/test/../")
;;=> (:ABSOLUTE "test" :UP)
在 truename 的返回值上调用 pathname-directory 时,“..”不会转换为“:UP”。(truename "C:/test/..") 也返回 #P"C:/test/../",那么为什么 ".." 没有被转换呢?