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

Joh*_*ugo 23 linux bash makefile

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

for number in 1 2 3 4 ; do \
    echo $$number ; \
done
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 42

根据gnu制作官方文件:

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

简而言之:

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

  • 要详细说明[变量的语法](https://www.gnu.org/software/make/manual/html_node/Reference.html):“ *要替换变量的值,请写一个美元符号,后跟名称括号或大括号中的变量:$(foo)或$$ foo是对变量foo的有效引用。$的特殊含义是为什么必须编写$$以获得文件名或配方中一个美元符号的效果。*“ (2认同)

l3x*_*l3x 13

$$是当前进程的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 \
    echo $$number ; \
done
208465number
208465number
208465number
208465number
Run Code Online (Sandbox Code Playgroud)

  • 这并没有回答这个问题,这个问题专门与 Makefile 中的 shell 脚本有关。 (2认同)