我试图让Android Studio启动器(studio.sh)使用我手动安装的Java(而不是系统范围的默认Java)。 由于我已经在我的.bashrc文件中声明了PATH和JAVA_HOME,我只是在shell脚本中find了这个文件:
。 /home/foobar/.bashrc
但由于某些原因,$ JAVA_HOME / bin / java仍然不被脚本识别为可执行文件。
我添加了一些日志logging,发现JAVA_HOME扩展为〜/ install / java …,即代字符操作符没有扩展到主目录。
我做了一些search,但没有find任何理由为什么没有扩大。 是代表Bash特定function(脚本使用#!/ bin / sh,而Linux Mint使用破折号而不是bash)? 在某些情况下,代字号不起作用吗?
我用.bashrc声明中的$ HOMEreplace了〜,然后运行,所以HOME在运行时是已知的。
在bash手册中 ,请注意在参数替换过程中进行大括号扩展,但不能递归:
扩展的顺序是:支撑扩展; 代字符扩展,参数和变量扩展,算术扩展和命令替换(按照从左到右的方式完成); 分词; 和文件名扩展。
这意味着在bash变量中存储的非波形(或参数引用或命令替换) 不会自动解析 。 你的JAVA_HOME变量包含一个文字波浪号,所以bash不会自动扩展它。
您的修正很可能是因为代字号扩展不适用于引号:
$ echo "~" ~ $ echo ~ /home/jeffbowman
…但像$HOME
参数扩展不会出现在引号中。 用$ HOME替换它将在JAVA_HOME分配期间扩展到您的主目录。
FOO=~/bar # stores /home/jeffbowman/bar FOO="~/bar" # stores ~/bar FOO=$HOME/bar # stores /home/jeffbowman/bar FOO="$HOME/bar" # stores /home/jeffbowman/bar
虽然更好的选择是确保您的分配是正确的,但如果您想手动扩展它,这些SO问题有一些很好的选择: