大家好,
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”不可以吗?
大家好,
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,所以
必需要用$去引用,把$表示出来。