我使用SBCL 1.1.4,发现pathname-directory表现得很奇怪:
假设路径名包含“..”,以下示例为trival。 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 /../”,为什么“..”没有被转换?
答案 0 :(得分:0)
这似乎是Windows上SBCL的一个问题。 /a/b/..
的广告应为/a/
。相反,它似乎返回对..
条目本身的引用。
在Linux上,这就是你得到的:
(truename "/etc/udev/..")
#P"/etc/"
我将此报告为SBCL开发人员的错误。