~/Mary 是相对路径吗?

~/Mary 是相对路径吗?

我们假设Mary是一个目录。以下路径是~/Mary相对路径吗?

答案1

不,这不是相对的。

这是一个完整路径,带有~别名。

相对路径描述与当前目录位置相关的路径。但是,~/Mary无论您当前位于哪个目录,都是完全相同的。

假设您当前登录的身份为鲍勃并且也在目录中/home/Bob,然后../Mary将是相对路径的示例/home/Mary。如果您现在在,/etc/something那么~/Mary仍然会是,/home/Bob/Mary../Mary现在会是/etc/Mary

请注意,Bash~以特定方式进行处理,并且它并不总是转换为$HOME.

如需进一步阅读,请参阅

答案2

如果这~/Mary是给任何系统调用的路径(例如open()stat()...),那么它是相对路径,它是与当前目录中的目录Mary相关的条目。~因此,如果您当前的目录是/tmp,那么这就是该/tmp/~/Mary文件。

但是,如果~/Mary在支持波形符扩展的 shell(或其他工具)中不加引号地使用它,那么它将~被替换为变量的内容$HOME(如果已设置),并且$HOME通常包含像 这样的绝对路径/home/me~/Mary将被扩展为/home/me/Mary,所以也是绝对路径。

如果您更改$HOME为相对路径(但您不想这样做),那么~/Maryshell 将扩展为相对路径:

$ HOME=..; echo ~/Mary
../Mary

如果您将其更改为//foo(或者如果您的主目录/曾经是 的常用目录root),则 的扩展~/Mary将不再是绝对路径名也不是相对路径名(至少按照 POSIX 定义)。

使用bash4.0 之前的版本,您甚至可以做一些有趣的事情,例如:

$ HOME='*' bash-3.2.48 -c 'cd /; echo ~/mount'
bin/mount run/mount

(4.0 中已修复)

更多信息:Unix&Linux

答案3

让我们变得迂腐吧。

正如其他人所说,它是一个别名;因此,严格来说,它既不是绝对路径,也不是相对路径。实际上,它是一个绝对路径,因为它与工作目录无关。

现在了解详细信息。在操作系统级别,不支持别名,因此所有绝对路径以斜杠开头的规则都成立,其他所有内容都是相对路径。然而,应用程序可能不仅仅将名称传递给内核:对:,的特殊处理~-常见的且依赖于应用程序。-用于启动选项,以便确保您使用相对路径,您可以在几乎所有情况下预先设置强制相对处理(据我所知,唯一的例外是在or./的某些实现中包含斜杠的主机名)。识别用于检测某些命令的 url 和远程主机,并且前​​导在某些情况下也具有特殊含义,但所有这些情况都是应用程序级别问题而不是操作系统级别。rcpscp://

几乎所有 shell(我知道有一个例外)和许多 Unix 应用程序都支持基本的波形符扩展。最有可能起作用的两个波形符扩展是~/path(其中前导波形符被变量的内容替换$HOME)和~name/pathname在用户数据库中查找以找到用户name的主目录)。奇怪的是,如果用户数据库不包含绝对路径(不要这样做)或$HOME不包含绝对路径(也不要这样做)。还可能存在其他形式的波形符扩展;例如,Bash 扩展~-到以前的工作目录,同样都是在应用程序级别(并且 shell 是一个应用程序)。

答案4

是的,~/Mary 是相对路径。

这个问题似乎是一个定义问题。我不确定是否存在官方系统范围的定义绝对路径相对路径

“路径”有两种类型:相对的绝对。绝对路径始终指向相同的资源。相对路径指向相对于其他资源的资源。

当使用~时,通常用于扩展到当前用户主目录。主目录取决于当前用户,所以 ~/Mary 是相对的到当前用户主目录。

例如,~/Mary可以扩展到/home/bob/Mary用户 bob,并且可以扩展到/home/alice/Mary用户 alice。

更多示例
./Mary 相对于当前目录
../Mary 相对于父目录
~/Mary 相对于当前用户主目录
Mary 相对于当前目录
/Mary 相对于根目录。根目录是固定的,所以这是一个绝对路径

然而,人们可能会声称即使是根目录也是相对于当前主机的。如果将主机添加到路径中,它将变为主机名:/Mary。但这仍然不是真正的绝对路径,因为“主机名”是相对于定义主机名的系统而言的。

相关内容