请教busybox makefile中的一行代码

大家好,

CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
else if [ -x /bin/bash ]; then echo /bin/bash; \
else echo sh; fi ; fi)

这句话的目的是为了打印CONFIG_SHELL这个变量的值,可是第一个if中为什么要写成"$$BASH",写成“$BASH”不可以吗?

在SHELL脚本中,符号$具有特殊意义,类似C语言的转义符号(或者就是转义符号),两个$(即$$)表示一个$,所以又叫去引用。这样以来,$$BASH在解释的时候,引号中的那部分实际上变成$BASH。

即:$(shell ...) 中省略部分是一个单独部分,把它先抹掉。这时,要保证省略部分保留原意,即:$BASH在解释时要被解释成$BASH这个字符串(而不是/bin/sh或其他),再递交给shell,所以
必需要用$去引用,把$表示出来。

SHELL脚本命令在执行前,是先替换变量,诸如$开头的(如$HOME,$PWD,,,(如有)),遇到$$直接成$,$后面的部分不做处理,最后再执行这个命令。

那为什么我在shell命令行窗口下输入echo $BASH和echo $$BASH的结果是不一样的,而且明显echo $$BASH的结果不是我想要的?难道说对于本
问题,CONFIG_SHELL被赋值前make程序会先进行解释,解释完之后再交由shell程序执行并将结果返回给CONFIG_SHELL变量吗?