为什么路径脚本中的波浪号没有在Shell脚本中扩展?

我试图让Android

Studio启动器(studio.sh)使用手动安装的Java(而不是系统范围的默认Java)。由于我已经在.bashrc文件中声明了PATH和JAVA_HOME,因此我只是在shell脚本中提供了该文件:

。/home/foobar/.bashrc

但是由于某些原因,该脚本仍无法将$ JAVA_HOME / bin / java识别为可执行文件。

我添加了一些日志记录,发现JAVA_HOME已扩展为〜/ install / java …,即,代字号运算符未扩展至主目录。

我进行了一些搜索,但找不到任何未扩展的原因。波浪号是否是Bash特有的功能(脚本使用#!/ bin / sh,Linux

Mint使用破折号而不是bash)?波浪号在某些情况下不起作用吗?

我在.bashrc声明中用$ HOME替换〜,然后它起作用了,因此在运行时就知道HOME了。

回答:

在bash手册中,请注意 参数替换 过程 中括号的扩展,但不是递归的:

扩展顺序为:大括号扩展;波浪号扩展,参数和变量扩展,算术扩展和命令替换(以从左到右的方式完成);分词 和文件名扩展。

这意味着在bash变量中未扩展存储的任何代字号(或参数引用或命令替换)都 不会自动解析

。您的JAVA_HOME变量包含文字波浪号,因此bash不会自动对其进行扩展。

您的修复很可能有效,因为波浪号扩展名不适用于引号:

$ echo "~"

~

$ echo ~

/home/jeffbowman

…但是参数扩展$HOME确实会出现在引号中。 在分配JAVA_HOME期间 ,用$ 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

以上是 为什么路径脚本中的波浪号没有在Shell脚本中扩展? 的全部内容, 来源链接: utcz.com/qa/399909.html

回到顶部