bash/Makefile 中的双美元符号是什么意思?
- 2024-10-24 08:50:00
- admin 原创
- 321
问题描述:
在 Makefile 中插入 shell 脚本时,我们必须使用双美元符号 ($$) 来引用变量。为什么这样?
for number in 1 2 3 4 ; do \n echo $$number ; \ndone
解决方案 1:
按照gnu make 官方文档:
配方中的变量和函数引用与 makefile 中其他地方的引用具有相同的语法和语义。它们还具有相同的引用规则:如果您希望在配方中出现美元符号,则必须将其加倍(“$$”)。对于使用美元符号引入变量的 shell(如默认 shell),务必清楚要引用的变量是 make 变量(使用单个美元符号)还是 shell 变量(使用两个美元符号)。
简而言之:
makefile 变量 => 使用单个美元符号
shell 变量 => 使用两个美元符号
解决方案 2:
$$
是您当前进程的PID (进程 ID)。
$ ps -ef|grep $$
user 208465 200620 0 10:30 pts/4 00:00:00 bash
$ for number in 1 2 3 4 ; do \n echo $$number ; \ndone
208465number
208465number
208465number
208465number
解决方案 3:
不直接适用于此示例 - 除非显示的代码是通过以下方式执行$(shell ...)
而不是通过规则执行:
启用二次扩展后,当双美元符号出现在前提条件列表中时,make 可能还会在第二个处理阶段解释它本身。(第一阶段:读取文件,设置变量;第二阶段:查找并调用依赖目标,执行规则)
当具有目标名称的变量仅在文件后续部分可用时,这用于允许动态指定依赖目标。
请参阅https://www.gnu.org/software/make/manual/html_node/Secondary-Expansion.html。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD