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

Kev*_*ith 4 linux environment-variables

最近我不得不更新我的JAVA环境变量 .bashrc

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

echo $(JAVA_HOME)#引发错误"找不到JAVA_HOME命令"

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

我怎样才能达到目前设定的$(JAVA_HOME)平等$JAVA_HOME?另外,为什么会这样呢?

谢谢

Que*_*tin 12

make 不是 bash

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


Mat*_*ery 5

更确切地说:

  • JAVA_HOME是一个shell变量; 假设它已经导出export,那么它就是一个环境变量.
  • $JAVA_HOMEbash扩展名为的shell变量的语法JAVA_HOME.
  • bash,$(command)替换输出command- 所以$(JAVA_HOME)试图运行一个被调用的命令JAVA_HOME,因此你得到的错误.
  • make启动时,它看起来在每个环境变量,并设置一个make同名变量的值相同.(参见http://www.gnu.org/software/make/manual/make.html#Environment.)
  • $(JAVA_HOME)make扩展make名为的变量的语法JAVA_HOME.

所以你Makefile应该工作得很好:$(JAVA_HOME)扩展make变量JAVA_HOME,它被设置为环境变量的值JAVA_HOME(除非你Makefile故意做一些事情来覆盖它),它具有正确的值.