Eig*_*ony 73
不,这不是相对的。
这是一个完整的路径,~
作为别名。
相对路径描述了与当前目录位置相关的路径。但是,~/Mary
无论您当前在哪个目录中,都是完全相同的。
假设您当前以Bob 的身份登录并且也在目录中/home/Bob
,那么../Mary
将是/home/Mary
. 如果您目前在,/etc/something
那么~/Mary
仍然是,/home/Bob/Mary
但../Mary
现在是/etc/Mary
。
请注意,Bash~
以特定方式处理,并且它并不总是转换为$HOME
.
如需进一步阅读,请参阅
Sté*_*las 50
如果这~/Mary
是给任何系统调用的路径(例如open()
,stat()
...),那么它就是一个相对路径,它是Mary
与~
当前目录中的目录相关的条目。因此,如果您的当前目录是/tmp
例如,那将是该/tmp/~/Mary
文件。
但是,如果~/Mary
在支持波浪号扩展的 shell(或其他工具)中不加引号地使用它,那么~
它将被$HOME
变量的内容(如果已设置)替换,并且$HOME
通常包含一个绝对路径,例如/home/me
,~/Mary
将被扩展为/home/me/Mary
,所以也是绝对路径。
如果您更改$HOME
为相对路径(但您不想这样做),那么~/Mary
shell 将扩展为相对路径:
$ HOME=..; echo ~/Mary
../Mary
Run Code Online (Sandbox Code Playgroud)
如果将其更改为//foo
(或者如果您的主目录曾经/
是 常见的root
),则 的扩展~/Mary
既不是绝对路径名也不是相对路径名(至少根据 POSIX 定义)。
使用bash
4.0 之前的版本,您甚至可以做一些有趣的事情,例如:
$ HOME='*' bash-3.2.48 -c 'cd /; echo ~/mount'
bin/mount run/mount
Run Code Online (Sandbox Code Playgroud)
(这是在 4.0 中修复的)
有关Unix 和 Linux 的更多信息,请访问
让我们学究。
正如其他人所说,它是一个别名;因此,它既不是绝对路径也不是相对路径。实际上,它是一个绝对路径,因为它与工作目录无关。
现在了解详情。在操作系统级别,不支持别名,因此所有绝对路径都以斜杠开头的规则成立,其他一切都是相对路径。然而,应用程序可能不只是通过名称内核:进行特殊的处理:
,~
并且-
是常见的,取决于应用。-
用于启动选项,以确保您使用的是相对路径,您可以./
在几乎所有情况下预先强制进行相对处理(据我所知,唯一的例外是主机名在rcp
或 的某些实现中包含斜杠scp
)。识别:
用于检测某些命令的 url 和远程主机并引导//
在某些情况下也有特殊含义,但所有这些情况都是应用程序级别的问题,而不是操作系统级别的问题。
几乎所有的 shell(我知道有一个例外)和许多 Unix 应用程序都支持基本的波浪号扩展。最有可能工作的两个波浪号扩展是~/path
(其中前导波浪号被$HOME
变量的内容替换)和~name/path
(在name
用户数据库中查找where以定位用户name
的主目录)。如果用户数据库不包含绝对路径(不要这样做)或$HOME
不包含绝对路径(也不要这样做),那么它变得时髦的地方。也可能存在其他形式的波浪号扩展;例如,Bash 扩展~-
到之前的工作目录,同样是在应用程序级别(并且 shell 是一个应用程序)。
归档时间: |
|
查看次数: |
10420 次 |
最近记录: |