Bash缺少$(HOME)变量

Man*_*ete 1 bash shell makefile

我一直在编译应用程序Makefile一段时间没有任何问题.今天,我意识到我Makefile不再工作了.一点调试,我很快发现$(HOME)没有定义

$echo $(HOME)
-bash: HOME: command not found
Run Code Online (Sandbox Code Playgroud)

我始终认为,$HOME$(HOME)可以互换使用.是否有理由可以配置系统以避免使用$(HOME)

Kei*_*son 8

${HOME},不是$(HOME).

$(HOME)将扩展为HOME命令的输出.由于(可能)没有这样的命令,您将收到错误消息.

但是,$(HOME)Makefile中的语法是否正确.如果你需要帮助调试你的Makefile,你需要告诉我们里面有什么 - 或者更好的是,一个表现出同样问题的小Makefile.make像这样的规则:

target:
        echo $(HOME)
Run Code Online (Sandbox Code Playgroud)

应该在运行时打印主目录的路径make target.

在shell中,您可以将HOME变量称为$HOME或作为${HOME}; 后者可以避免相邻令牌的问题.

在Makefile中,您可以使用$(HOME)${HOME},但$(HOME)表单更常见.只有当变量名称长度为一个字符时才能省略括号(但即使这样,您也应该使用它们来清楚).(没有人声称这make是一种清晰直观的语法模型.)

  • "简单的印刷错误"是进行投票的原因.在我看来,误解shell语法不是一个错字.您是否对您的陈述有一个引用,即语法错误*定义*是关闭问题的理由? (5认同)
  • @ hek2mgl:我不同意.如果你愿意,可以随意投票结束. (3认同)
  • @ hek2mgl我其实认为它是有建设性的 (2认同)