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

Linux bash/Makefile中双美元符号的含义是什么?,linux,bash,makefile,Linux,Bash,Makefile,在Makefile中插入shell脚本时,我们必须(?)使用双美元符号($$)来引用变量。为什么会这样 for number in 1 2 3 4 ; do \ echo $$number ; \ done 根据: 配方中的变量和函数引用具有相同的语法和 对makefile中其他地方的引用的语义。他们也有 同样的报价规则:如果你想在你的报价单上出现一个美元符号 配方,必须加倍(“$$”)。对于类似默认shell的shell, 使用美元符号引入变量,保持 在您的头脑中清楚您想要引用的变量

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

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

配方中的变量和函数引用具有相同的语法和 对makefile中其他地方的引用的语义。他们也有 同样的报价规则:如果你想在你的报价单上出现一个美元符号 配方,必须加倍(“$$”)。对于类似默认shell的shell, 使用美元符号引入变量,保持 在您的头脑中清楚您想要引用的变量是否是 make变量(使用一个美元符号)或shell变量(使用两个美元符号 美元符号)

简言之:

  • makefile变量=>使用单美元符号
  • shell变量=>使用两个美元符号

不直接适用于本例——除非所示代码是通过
$(shell…
而不是规则执行的:

在启用二次扩展的情况下,make还可以在第二个处理阶段解释双美元本身,当它出现在特权列表中时。(第一阶段:读取文件,设置变量;第二阶段:查找和调用依赖项目标,执行规则)

当具有targets名称的变量仅在文件中稍后才可用时,这用于允许动态指定依赖项目标

请参阅。

详细说明:“要替换变量的值,请在括号或大括号中写一个美元符号,后跟变量名称:
$(foo)
${foo}”
是对变量
foo
的有效引用。
$
的这一特殊意义就是为什么必须编写
$
才能在文件名或配方中产生单美元符号的效果。”