在bash手册中,请注意 在 参数替换 过程 中括号的扩展,但不是递归的:
扩展顺序为:大括号扩展;波浪号扩展,参数和变量扩展,算术扩展和命令替换(以从左到右的方式完成);分词 和文件名扩展。
这意味着在bash变量中未扩展存储的任何代字号(或参数引用或命令替换)都 不会自动解析
。您的JAVA_HOME变量包含文字波浪号,因此bash不会自动对其进行扩展。
您的修复很可能有效,因为波浪号扩展名不适用于引号:
$ echo "~"~$ echo ~/home/jeffbowman
…但是参数扩展
$HOME确实会出现在引号中。 在分配JAVA_HOME期间 ,用$ HOME替换它会扩展到您的主目录。
FOO=~/bar # stores /home/jeffbowman/barFOO="~/bar" # stores ~/barFOO=$HOME/bar # stores /home/jeffbowman/barFOO="$HOME/bar" # stores /home/jeffbowman/bar



