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为相对路径(但您不想这样做),那么~/Maryshell 将扩展为相对路径:
$ HOME=..; echo ~/Mary
../Mary
Run Code Online (Sandbox Code Playgroud)
如果将其更改为//foo(或者如果您的主目录曾经/是 常见的root),则 的扩展~/Mary既不是绝对路径名也不是相对路径名(至少根据 POSIX 定义)。
使用bash4.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 次 |
| 最近记录: |