为什么 tempdir() 在 osx 上的目录树末尾添加额外的斜杠?

Sim*_*lon 5 macos r file path

沿途的某个地方tempdir()在树末尾的目录之前添加了一个额外的正斜杠。是否有任何原因,是否有任何重要的情况?根据另一个站点的这个答案,目录树中的双斜杠无关紧要(但它们在路径的开头),那么为什么R在 osx 上添加一个额外的斜杠呢?

这可以被认为是一个错误还是有必要的情况?在示例中,两个路径都正确解析:

tempdir()
  [1] "/var/folders/ck/1x5j5jvx5mq17clf5r32gg540000gn/T//Rtmpp6VKKK"
normalizePath( tempdir() )
  [1] "/private/var/folders/ck/1x5j5jvx5mq17clf5r32gg540000gn/T/Rtmpp6VKKK"

setwd( tempdir() )
write.table("" , file="This is a test.txt")

system( paste0( "cd " , tempdir() , "; ls -a" ) )
  .
  ..
  This is a test.txt

system( paste0( "cd " , normalizePath( tempdir() ) , "; ls -a" ) )
  .
  ..
  This is a test.txt
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我意识到它与这个网站不是很相关,但也许有更多osx经验的人可以解释为什么要normalizePath()更改/var/private/var? 这与别名有关吗?

Ern*_*ill 6

这很可能是tempdir. 根据功能文档[1]

环境变量TMPDIR,TMPTEMP依次检查,并使用第一个找到的指向可写目录的变量:如果没有成功‘/tmp’则使用。

TMPDIR,默认情况下,包含一个尾部斜杠,tempdir()在组合其结果时似乎没有注意到。更好的实现将首先删除尾部斜杠(如果存在)。

是的,在 Mac OS X 上,/tmp是指向/private/tmp.

[1] https://stat.ethz.ch/R-manual/R-devel/library/base/html/tempfile.html