繁体   English   中英

bash/Makefile 中的双美元符号是什么意思?

[英]What is the meaning of a double dollar sign in bash/Makefile?

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

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

根据gnu制作官方文档

配方中的变量和函数引用与makefile中其他位置的引用具有相同的语法和语义。 它们也有相同的引用规则:如果你想在你的食谱中出现一个美元符号,你必须加倍它('$$')。 对于像默认shell这样使用美元符号来引入变量的shell,重要的是要清楚地记住要引用的变量是make变量(使用单个美元符号)还是shell变量(使用两个美元符号) )。

简而言之:

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

$$ 是您当前进程的 PID。

$ ps -ef|grep $$
user       208465  200620  0 10:30 pts/4    00:00:00 bash

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

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

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

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

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

当你在 shell 中使用echo $$时,你可能会看到:

echo $$
486

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM