TMPDIR 是否应该有一个尾部斜杠?

TMPDIR 是否应该有一个尾部斜杠?

在 Unix/POSIX/Linux 系统中,可以通过 TMPDIR 变量设置临时目录。维基百科 引用 Open Group 的规范提到这一点。

这对我来说没有答案:这是否应该包含尾部斜杠? (即TMPDIR="/foo/bar"TMPDIR="/foo/bar/")。

根据我在网上找到的示例,我觉得尾部斜杠更常见,但我更喜欢一个明确的答案。这是否已在任何地方标准化/澄清?

答案1

在末尾加斜线和不加斜线没有显着区别。末尾有斜杠,如果它们的构造类似于$TMPDIR/something,您将获得包含双斜杠的路径,但这应该影响很小或没有影响。仅当TMPDIR=/这会产生影响时,路径名开头的双斜杠才可以被特别解释;看//foo/bar 在哪些系统上与 /foo/bar 不同?

如果$TMPDIR通过命名符号链接来引用目录,并且路径名以斜杠结尾,则无法检测到该链接。即,如果我使用TMPDIR=/tmp/dir/and /tmp/diris 到其他地方的符号链接,则[ -L "$TMPDIR" ]始终为 false,因为符号链接将被取消引用。

某些实用程序可能会以与没有尾部斜杠字符时不同的方式解释给定的参数。如果这是一个问题,那么当您需要确保参数没有尾部斜杠时,请使用$TMPDIR/.or ,而当您需要尾部斜杠时,请使用or 。如果有的话,替换会删除尾部斜杠(但不会删除${TMPDIR%/}$TMPDIR/${TMPDIR%/}/${TMPDIR%/}多种的尾部斜杠)。

POSIX 不强制要求是否使用尾部斜杠。最后,这取决于个人喜好,但保持一致会有所帮助。就个人而言,我通常不会在保存路径名的变量末尾添加斜杠。

还相关:

答案2

加上 Artem 10 年的经验,我完全同意他的评论。当然,要小心避免使用写得不好的脚本,这些脚本会盲目地将文件名连接到 $TMPDIR

使用 rsync 等某些实用程序时还应小心,这些实用程序对目录名后跟尾部斜杠(目录下的文件)和不带尾部斜杠的目录名(目录本身)进行不同的解释

最后,tmp 目录可能是符号链接的。

尾部斜杠的第一点是取消引用符号链接。换句话说,如果 DIRNAME 是符号链接,则当 DIRNAME/ 引用符号链接指向的目录时,DIRNAME 将引用该符号链接。

相关内容