`~/Documents` 是相对路径还是绝对路径?

`~/Documents` 是相对路径还是绝对路径?

这只是一个词汇问题,但它一直在我的脑海里盘旋。

它来自练习考试线性PIC准备书。根据书中的正确答案是,这~/Documents是一个相对目录,因为它是相对于主目录的。

然而,这本书包含大量的打字错误和错误,所以我不能认为其中所写的一切都是理所当然的。在这里我不同意,因为对我来说,~它充当由 shell 扩展为变量内容$HOME或当前用户主目录路径的变量(参见man bash),所以实际路径/home/myuser/Documents确实是一个绝对目录。

甚至维基百科,这一次,对我来说在这个话题上似乎没有任何帮助(即使它似乎证实这本书在这个问题上是错误的):

无论当前工作目录如何,绝对路径或完整路径都指向文件系统中的同一位置。为此,它必须包含根目录。

相比之下,相对路径从某个给定的工作目录开始,从而无需提供完整的绝对路径。

在这里,我再次不同意:根据这个定义,/opt/kde3/bin/../lib不依赖于当前工作目录的路径应该是绝对路径,但是我目前对此的理解与本书的作者相匹配,使该路径成为相对路径。

据报道,快速的网络搜索只会增加我的挫败感韦氏词典:

绝对路径- 相对于根目录的路径。它的第一个字符必须是路径名分隔符。

那么$HOME/Documents,或者甚至$HOME不会被视为绝对目录?或者这个定义是否意味着变量扩展?那么贝壳的~性格又如何呢?我可以在某处找到相对目录与绝对目录的可靠定义吗?我一直都错了吗?

答案1

这本质上是一个关于术语定义的问题。因此,就您的目的而言,答案就是 LPIC 想要的任何内容。但我们可以根据技术事实得出一些结论:

如果您传递'~/Documents'系统调用~,它会在当前目录中查找完全命名的目录(可能会失败)。因此,根据使用的路径名的概念内核,这是一条相对路径——但这不是我们的意思。

~语法是由以下实现的贝壳(以及其他为了方便而模仿它的程序)扩大它变成一个真正的路径名。为了说明这一点,它与(同样是 shell 语法)~/Documents大致相同。$HOME/Documents由于$HOME应该是绝对路径,的价值 $HOME/Documents也是绝对路径。但文本$HOME/Documents还是~/Documents必须由 shell 扩展才能成为我们所指的路径。

因此,如果我想要精确和一致,我会说~/Documents扩展为绝对路径的 shell 脚本片段。

答案2

如果作者试图通过将文字字符串(没有 shell 扩展)作为路径来吸引您,那么它就是相对路径 ( mkdir -p './~/Documents')。否则:


这是一个绝对路径,因为解析它不依赖于进程的当前工作目录。 相对路径始终表示相对于进程的工作目录。或者在符号链接目标的情况下,相对于符号链接的位置。 (gcc -> gcc-5.2对比gcc -> /usr/bin/gcc-5.2)。这对于 NFS 安装和其他可以通过不同绝对路径访问相同符号链接的情况很重要。例如

/net/tesla/home/peter/foo -> bar  # always works from other machines

/net/tesla/home/peter/foo -> /home/peter/bar  # references my home dir on the local machine, not tesla.

Debian 有时会安装符号链接到../../doc/whatever/whatever,而不是绝对符号链接目标,因此当 NFS 安装在其他地方时,或者在查看 chroot 而不使用chroot(8)ing 时,它可以工作。

每个 Unix 进程都有自己的 cwd。该pwd命令的存在只是为了打印它。

看: http://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html 有关使用 POSIX 系统调用更改目录的更多信息。


正如其他人所说,~在路径用于任何用途之前,它会被 shell 扩展。在 shell 脚本中使用~/bin/myprog将使其对于不同的用户有不同的工作方式。~/bin/foo和之间的区别/home/peter/bin/foo在于,其中一个对位置进行了硬编码,而另一个则对其进行了参数化。将~版本称为相对路径是错误的(IMO)。

谈论事物“与环境变量相关”只是令人困惑。对于在您使用的上下文中具有特定技术含义的术语,使用不同的英语语言含义是不好的做法。

在损坏的系统上,使用HOME=a/relative/path~/foo扩展为相对路径。这根本就不是一个可用的设置。

答案3

如果您的$HOME/home/white/~/Documents(与 相同$HOME/Documents)由 shell 扩展(请参阅这里以获得解释)到/home/white/Documents,这是一个绝对小路。

相对路径是不以/(shell 扩展后) 开头的路径,例如../Documentsfoo/bar

一些旧的 shell 不会扩展~(像bashtcshzsh等那样扩展);他们会将其视为以;~/Documents开头的相对路径。~但您通常没有这样的目录名称~(但您可以使用 来创建一个mkdir '~',我不建议这样做)。

答案4

该路径可以扩展到不同的位置,具体取决于用户是谁。话虽如此,在我看来,这仍然是一条绝对路径,而不是相对路径。但是,我不认为绝对路径和相对路径的定义如此精确。这不是数学。在我看来,这个问题并不能真正考验理解力,而且毫无意义。

相关内容