繁体   English   中英

Linux - 环境变量$ HOME与$(HOME)

[英]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_HOMEmake变量的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM