Linux bash/Makefile中双美元符号的含义是什么?
在Makefile中插入shell脚本时,我们必须(?)使用双美元符号($$)来引用变量。为什么会这样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, 使用美元符号引入变量,保持 在您的头脑中清楚您想要引用的变量
for number in 1 2 3 4 ; do \
echo $$number ; \
done
根据:
配方中的变量和函数引用具有相同的语法和
对makefile中其他地方的引用的语义。他们也有
同样的报价规则:如果你想在你的报价单上出现一个美元符号
配方,必须加倍(“$$”)。对于类似默认shell的shell,
使用美元符号引入变量,保持
在您的头脑中清楚您想要引用的变量是否是
make变量(使用一个美元符号)或shell变量(使用两个美元符号
美元符号)
简言之:
- makefile变量=>使用单美元符号
- shell变量=>使用两个美元符号
$(shell…
而不是规则执行的:
在启用二次扩展的情况下,make还可以在第二个处理阶段解释双美元本身,当它出现在特权列表中时。(第一阶段:读取文件,设置变量;第二阶段:查找和调用依赖项目标,执行规则)
当具有targets名称的变量仅在文件中稍后才可用时,这用于允许动态指定依赖项目标
请参阅。详细说明:“要替换变量的值,请在括号或大括号中写一个美元符号,后跟变量名称:$(foo)
或${foo}”
是对变量foo
的有效引用。$
的这一特殊意义就是为什么必须编写$
才能在文件名或配方中产生单美元符号的效果。”