$HOME
并且~
通常指代同一件事。也就是说,它们是“用户主”目录的路径,其一般形式为“/home/userName”。
什么时候,如果有的话,这些不是指同一个目录?
答案1
两者$HOME
都~
指向同一个文件夹,即当前用户的主文件夹,但两者是非常不同的东西。
$HOME
是一个环境变量,设置为包含当前用户的主文件夹。~
是壳层展开符号,即在执行实际命令之前处理的符号之一。~
单独扩展为 $HOME 的值。~nemo
扩展为用户 的主目录nemo
。shell 扩展符号是 shell 处理/解释以构建实际命令的字符(或字符对)。shell 扩展符号的另一个示例是*
,它用于扩展文件名。
答案2
它们之间的一个区别在于当它们被"
引号括起来时,Bash shell 如何进行转换。
echo
如果像这样使用,不带任何引号,~
则$HOME
具有相同的效果:
$ echo ~
/home/elias
$ echo $HOME
/home/elias
然而,如果用"
引号引起来,结果就不同了:
$ echo "~"
~
$ echo "$HOME"
/home/elias
答案3
答案4
$HOME/ 更有可能在标准 POSIX.2 Bourne /bin/sh 中工作,因为波浪号扩展是 BSD csh tcsh GNU bash 和其他系统中的扩展。
如果您想编写可移植到 busybox 或 dash 或 BSD sh 的脚本,请投资额外的字母,以免在某些系统上因 ~/: No such file or directory 而崩溃。
我还发现 $HOME/ 更具可读性。