You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Makefile的同一行内设置并正确引用Shell变量

在Makefile同一行中正确设置并引用Shell变量

这个问题的核心在于Makefile的变量展开优先级比Shell高:当你在Makefile的命令行里写${ABC}时,Make会先尝试把它当作Make自身的变量解析,而不是留给Shell处理。你这里没定义过Make变量ABC,所以它会被展开成空字符串,最终传到Shell里的命令就变成了ABC=123 && echo value is ,自然输出空值。

要解决这个问题,我们需要让Shell来解析这个变量,有两种常用的转义方法:

方法1:用反斜杠转义美元符号

把Make的变量引用符号${ABC}改成\${ABC},这样Make就会把${ABC}原封不动传递给Shell,由Shell来解析这个Shell变量:

main:
    ABC=123 && echo value is \${ABC}

执行make main后会得到正确输出:

ABC=123 && echo value is ${ABC}
value is 123

方法2:用双美元符号代替单美元符号

在Makefile中,$$会被解析成单个$,所以我们可以把${ABC}写成$$ABC(Shell中$ABC和${ABC}功能等价):

main:
    ABC=123 && echo value is $$ABC

执行后同样能得到符合预期的结果。

针对你实际的source需求的示例

如果你的真实场景是要source某个脚本并使用其中的变量,比如source./env.sh后引用里面的变量MY_VAR,用同样的转义逻辑处理即可:

load-env:
    source ./env.sh && echo "加载的变量值为:$$MY_VAR"

这样Make不会提前解析$$MY_VAR,而是把它传给Shell,让Shell在source脚本后正确读取变量的值。

内容的提问来源于stack exchange,提问作者Alex028502

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 21:44:09