
. /home/foobar/.bashrc
但由于某种原因,脚本仍然没有将$JAVA_HOME / bin / java识别为可执行文件.
我添加了一些日志记录,发现JAVA_HOME扩展为〜/ install / java …,即代字号操作符未扩展到主目录.
我做了一些搜索,但找不到任何原因,因为它没有扩展.是否为特定于Bash的功能(脚本使用#!/ bin / sh,Linux Mint使用短划线,而不是bash)?在某些情况下,代字号不起作用吗?
我在.bashrc声明中用$HOME替换〜然后它工作,所以HOME在运行时已知.
The order of expansions is: brace expansion; tilde expansion, parameter and variable expansion, arithmetic expansion, and command substitution (done in a left-to-right fashion); word splitting; and filename expansion.
这意味着在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
虽然更好的选择是确保您的分配正确,但如果您想手动扩展它,这些SO问题有一些很好的选择:
> “Tilde expansion in quotes”
> “How to manually expand a special variable (ex: ~ tilde) in bash”
转载注明原文:linux – 为什么路径中的波浪号未在shell脚本中展开? - 乐贴网