sysabod 2016-01-02 08:27 采纳率: 0%
浏览 2012
已结题

请教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”不可以吗?

  • 写回答

3条回答 默认 最新

  • hchen90 2016-01-02 22:32
    关注

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

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

    评论

报告相同问题?