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

时间:2010-08-19 21:35:03

标签: linux environment-variables

最近我不得不在.bashrc

中更新我的JAVA环境变量
  

echo $ JAVA_HOME#打印出/ usr / java /...

     回显$(JAVA_HOME)#引发错误“无法找到JAVA_HOME命令”

我担心使用$(JAVA_HOME)的make文件在$JAVA_HOME被识别后无效,但不会$(JAVA_HOME)

如何让$(JAVA_HOME)等于$JAVA_HOME,这是当前设定的?另外,为什么会这样呢?

感谢

6 个答案:

答案 0 :(得分:12)

make不是bash

他们以不同的方式处理变量。 $foo是你在bash中读取一个名为 foo 的变量的方式,$(foo)是你在makefile中读取它的方式。

答案 1 :(得分:5)

更确切地说:

  • JAVA_HOME是一个shell变量;假设它已使用export导出,那么它就是一个环境变量。
  • $JAVA_HOMEbash语法,用于展开名为JAVA_HOME的shell变量。
  • bash中,$(command)替换了command的输出 - 所以$(JAVA_HOME)正在尝试运行名为JAVA_HOME的命令,因此出现了错误
  • make启动时,它会查看每个环境变量并将同名的make变量设置为相同的值。 (见http://www.gnu.org/software/make/manual/make.html#Environment。)
  • $(JAVA_HOME)make语法,用于展开名为make的{​​{1}}变量。

因此,JAVA_HOME应该可以正常运行:Makefile扩展$(JAVA_HOME)变量make,该变量设置为环境变量JAVA_HOME的值(除非你的JAVA_HOME故意做了一些事情来覆盖它,否则它具有正确的价值。

答案 2 :(得分:2)

  

问:我的make文件是否会读取环境   那么变量呢?如果我定义$ JAVA_HOME   在.bashrc中,我的make文件会被读取   $(JAVA_HOME)正确吗?

答:是的,绝对:)

答案 3 :(得分:1)

make会将其变量设置为环境。 (反之则不然。)

答案 4 :(得分:1)

$ JAVA_HOME和$(JAVA_HOME)之间差异的原因很简单,make的变量语法与bash不同。

答案 5 :(得分:1)

在pash中也允许使用

...和$ {foo}或$ {HOME},但对于HOME,很少需要。它对于连接是有用的,因为$ {HOME} OFFICE将扩展到我的机器上的/ home / stefanOFFICE,但我不需要它,而$ HOMEOFFICE是完全未知的; $ HOME未扩展。

$ HOME通常是连接的,但是使用斜杠(足以分隔变量),因此$ {HOME} / bin和$ HOME / bin都可以工作。