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

关于Makefile变量与Shell变量的疑问:为何输出不符合预期?

问题原因

Makefile里的${aaa}是Make在解析规则阶段就会展开,不是等到shell执行命令的时候才替换。

看你的代码:

aaa := outer
all: 
    @aaa=inner; echo ${aaa}
    @echo ${aaa}

当Make处理这个规则时,会先把所有${aaa}替换成它的Make变量值outer,所以实际传给shell执行的命令是:

aaa=inner; echo outer
echo outer

自然输出就是outer outer了。

解决办法

如果你想让shell变量生效,得让shell来处理变量引用,而不是Make。可以把${aaa}改成$$aaa(Make会把$$转义成单个$,shell执行时就变成$aaa):

aaa := outer
all: 
    @aaa=inner; echo $$aaa
    @echo ${aaa}

这样第一条命令shell执行的是aaa=inner; echo $aaa,输出inner,第二条命令Make展开后是echo outer,输出outer,就能得到你预期的inner outer。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:57:10