还请注意,我们需要将美元符号加倍,以防止 make 对其进行解释;以及 在 shell 中正确使用引号括住字符串。 (在这个特定情况下,我们知道字符串不包含任何 shell 元字符;但许多初学者也会遇到这个问题。)
另外,GNU Make 允许您指定 .ONESHELL ,强制在单个 shell 实例中评估配方中的所有命令;
.ONESHELL:
foo:
i=1
echo "$${i}"
(命令替换,尝试运行命令 $(i) 并将其标准输出插入到下一步将执行的命令行的一部分)和 i (变量插值,也可以写成 ${i} 之间的区别 $i 使用圆括号来表示 make 确实令人困惑 make ;但同样,这是一个 shell 变量。简而言之,前面带有制表符的所有内容都由 shell 进行评估(但如果它包含 make 变量,或者在 GNU Make 中,包含函数调用,则将首先评估这些变量)。