光盘~
做同样的事情
cd $HOME
Run Code Online (Sandbox Code Playgroud)
这也与
cd /home/tandu
Run Code Online (Sandbox Code Playgroud)
然而,
cd ~not-tandu
Run Code Online (Sandbox Code Playgroud)
更改为 /home/not-tandu
这纯粹是一个语法选择吗?内核(或cd可执行文件)是如何处理的?~如果省略其他所有内容,是否有添加斜杠的特殊情况?也就是说,~/和~换到同一个目录,不过~a是一个目录上去。对于您更改到的任何其他目录,不能说同样的话。
pen*_*359 21
~是$HOME许多 shell 提供的别名,但$HOME更通用。 $HOME实际上要求 shell 在此处插入(替换)环境变量 HOME。有很多不同的环境变量可以替换,尝试运行env一个列表。请注意,~当它不在单词的开头时,它并不总是被识别。试试这两个命令进行比较:
ls /~
ls /$HOME
Run Code Online (Sandbox Code Playgroud)
第一个被传递给 ls 可执行文件/~,然后它尝试查看~根目录中调用的文件,第二个扩展$HOME并成为//home/user然后作为命令行参数传递给 ls 可执行文件。所有 POSIX 系统(POSIX 是 UNIX 和 Linux 系统运行方式的标准)都允许将多个斜杠视为一个斜杠,因此//home/user与说/home/user. ~username是告诉 shell 在 passwd 文件中查找用户名并返回其主目录的快捷方式。没有等效的环境变量。所有这些替换都是由 shell 完成的,并且大多数都支持,但是只有像这样的环境变量$HOME才能保证所有 shell 都支持。还,cd实际上是一个内置命令。这是一个特殊的指令,它告诉 shell 本身改变目录。它不像其他 shell 内置程序可以作为单独的可执行文件来实现,echo因为它用于更改 shell 进程的基本属性。 echo仅仅是出于性能原因内置的 shell,但在 UNIX 的美好时光中,它只能作为它自己的可执行文件使用/bin/echo。
phe*_*mer 17
~foo 表示“用户 foo 的主目录”。
这不是由内核完成的,而是由 shell 解释的。每当 shell 将其~foo视为参数时,它会透明地将其替换为用户的主目录foo并将其传递到它的位置。因此,当您运行时cd ~tandu,外壳实际上正在运行cd /home/tandu。