在终端中,引用主页的一种方法是使用~/
。我不明白这是如何工作的,因为 的输出file ~/
是:
/home/admin/: directory
运行~/
结果如下:
-bash: /home/admin/: Is a directory
~/
那么转换成什么呢/home/admin
?
~/
似乎也可以在 中使用/bin/dash
,所以我还知道它不是 bash 特有的。
答案1
这是波浪号扩展。
波浪符号扩展需要POSIX(看到第一个链接页面)并出现在所有现代伯恩风格的贝壳. 其中包括流行的 shell bash
、、ksh93
和zsh
,但也包括更简约的 shell,如mksh
、、dash
和busybox ash
。
实际上,不同的 POSIX 兼容 shell 有时在波浪号扩展的精确细节上有所不同,既包括未指定HOME
但未设置或为空的情况,也包括允许~
符号用于除扩展用户主目录以外的其他目的的情况。例如,波浪符号扩展bash
PWD
还提供了访问和变量值的简写形式OLDPWD
,分别使用~-
和~+
。
然而,在典型情况下,它在 Bourne 风格的 shell 中工作方式大致相同。这些都是典型情况(但请注意,这种分离它们不是官方的,这只是我呈现材料的方式):
~
或者~/
直接扩展到您的主目录。~/
后面跟着更多的路径组件,扩展为从您的主目录开始的路径。~username
或者~username/
本身扩展为用户名为 的用户的主目录username
。~username/
后跟更多路径部分,扩展为从用户名为 的用户的主目录开始的路径username
。
答案2
~
是$HOME
~
是“简写”方式,$HOME
换句话说就是您的主目录。它在 shell 中有效(例如bash
),称为“波浪线扩展”。
如果您添加尾部斜杠,则表示您正在谈论目录。
例子:
$ ls -d ~/
/home/sudodus/
$ ls -d ~
/home/sudodus
$ ls -d $HOME
/home/sudodus
$ sudo -i
[sudo] lösenord för sudodus:
# ls -d ~/
/root/
# ls -d ~
/root
# exit
logout
$ ls xournal.png
xournal.png
$ LANG=C ls xournal.png/
ls: cannot access 'xournal.png/': Not a directory