bash / Makefile中双美元符号的含义是什么?

时间:2014-10-25 16:51:40

标签: linux bash makefile

在Makefile中插入shell脚本时,我们(?)使用双美元符号($$)来引用变量。为什么会这样?

for number in 1 2 3 4 ; do \
    echo $$number ; \
done

2 个答案:

答案 0 :(得分:35)

根据gnu make official doc

  

配方中的变量和函数引用具有相同的语法和   语义到makefile中其他地方的引用。他们也有   相同的报价规则:如果你想要一个美元符号出现在你的   食谱,你必须加倍('$$')。对于像默认shell这样的shell,   使用美元符号来引入变量,保持这一点非常重要   在你的脑海中清楚你要引用的变量是否为a   make变量(使用单个美元符号)或shell变量(使用两个   美元符号)。

简而言之:

  • makefile variable =>使用单一美元符号
  • shell variable =>使用两个美元符号

答案 1 :(得分:0)

不适用于此示例-除非显示的代码是通过$(shell ...)而不是规则执行的,否则:

启用辅助扩展后,make可能还会在第二个处理阶段中解释双美元本身,如果它出现在条件列表中。 (第一阶段:读取文件,设置变量;第二阶段:查找并调用依赖目标,执行规则)

当带有目标名称的变量仅在文件的后面可用时,它用于允许动态指定依赖关系目标。

请参见https://www.gnu.org/software/make/manual/html_node/Secondary-Expansion.html