$HOME并且~通常指同一件事。也就是说,它们是“用户的主”目录的路径,该目录的一般形式为“/home/userName”。
什么时候,如果有的话,这些不是指同一个目录吗?
van*_*ium 47
双方$HOME并~指向同一个文件夹,当前用户的主文件夹,但两者有很大的不同的东西。
$HOME是一个环境变量,设置为包含当前用户的主文件夹。~是外壳扩展符号,即在执行实际命令之前处理的符号之一。~单独扩展到 $HOME 的值。~nemo扩展到用户的主目录nemo。shell 扩展符号是一个字符(或一对字符),由 shell 处理/解释以构建实际命令。外壳扩展符号的另一个示例是*,用于扩展文件名。Eli*_*ias 18
它们的不同之处在于 Bash shell 在用"引号括起来时如何转换它们。
如果您echo像这样使用,不带任何引号,则~和$HOME具有相同的效果:
$ echo ~
/home/elias
$ echo $HOME
/home/elias
Run Code Online (Sandbox Code Playgroud)
但是,"在它们周围加上引号,结果会有所不同:
$ echo "~"
~
$ echo "$HOME"
/home/elias
Run Code Online (Sandbox Code Playgroud)
Dmi*_*yev 13
~仅作为波浪号前缀的一部分扩展,根据定义,波浪号前缀必须从单词的开头开始。此外,因为它曾经是通配符模式的一部分,~所以在双引号内不起作用。因此,"~"或a~b将导致~保留字面值。
单个~(或 a~后跟 a /)将扩展到当前用户的家:
$ echo ~/.ssh
/home/user/.ssh
Run Code Online (Sandbox Code Playgroud)
A~后跟用户名将扩展到该用户的主文件夹:
$ echo ~root/.ssh
/root/.ssh
Run Code Online (Sandbox Code Playgroud)
A~后跟 a+或 a-和可选数字将扩展为目录堆栈的元素:
$ cd /etc
$ echo ~+0
/etc
Run Code Online (Sandbox Code Playgroud)
$HOME相当于单个~,它遵循变量的语法规则。例如,它在双引号内展开,可以取消设置,并且可以对其应用字符串操作操作数。