[英]Linux - environment variables $HOME versus $(HOME)
最近我不得不在.bashrc
更新我的JAVA环境变量
echo $ JAVA_HOME#打印出/ usr / java / ...
echo $(JAVA_HOME)#引发错误“找不到JAVA_HOME命令”
我担心我的make文件,使用$(JAVA_HOME)
将无法工作,因为$JAVA_HOME
被识别,但不是$(JAVA_HOME)
如何让$(JAVA_HOME)
等于$JAVA_HOME
,这是当前设置的? 另外,为什么会这样呢?
谢谢
make
不是bash
他们以不同方式处理变量。 $foo
是你如何在bash中读取一个名为foo的变量,而$(foo)
是你在makefile中读取它的方式。
更确切地说:
JAVA_HOME
是一个shell变量; 假设它已导出export
,那么它就是一个环境变量。 $JAVA_HOME
是用于扩展名为JAVA_HOME
的shell变量的bash
语法。 bash
, $(command)
替代品的输出command
-所以$(JAVA_HOME)
正试图运行一个叫命令JAVA_HOME
,所以你得到了错误。 make
启动时,它会查看每个环境变量并将同名的make
变量设置为相同的值。 (参见http://www.gnu.org/software/make/manual/make.html#Environment 。) $(JAVA_HOME)
是用于扩展名为JAVA_HOME
的make
变量的make
语法。 所以你的Makefile
应该可以正常工作: $(JAVA_HOME)
扩展make
变量JAVA_HOME
,它被设置为环境变量JAVA_HOME
的值(除非你的Makefile
故意做了一些事情来覆盖它),它具有正确的值。
问:那我的make文件会读取环境变量吗? 如果我在.bashrc中定义$ JAVA_HOME,我的make文件会正确读取$(JAVA_HOME)吗?
答:是的,绝对:)
make会将其变量设置为环境。 (反之则不然。)
$ JAVA_HOME和$(JAVA_HOME)之间差异的原因很简单,make与变量的语法不同于bash。
...在bash中也允许$ {foo}或$ {HOME},但对于HOME,很少需要。 它对于连接是有用的,因为$ {HOME} OFFICE将扩展到我的机器上的/ home / stefanOFFICE,但我不需要它,而$ HOMEOFFICE是完全未知的; $ HOME未扩展。
$ HOME通常是连接的,但是使用斜杠(足以分隔变量),因此$ {HOME} / bin和$ HOME / bin都可以工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.