在makefile中使用带引号的变量时,“未终止的引用字符串”

时间:2016-11-18 09:31:17

标签: linux bash makefile

我有以下makefile

help:
    @echo "MYVAR = $(MYVAR)"

如果被称为工作:

» MYVAR="hello" make -f makefile
MYVAR = xxx

可是:

» MYVAR='"' make -f makefile 
/bin/sh: 1: Syntax error: Unterminated quoted string
makefile:2: recipe for target 'help' failed
make: *** [help] Error 2

我该如何避免?有时候我的变量里面只引用了引号(我经常处理json)

2 个答案:

答案 0 :(得分:2)

如果你想要一个完全通用的引用机制,那么你必须这样做:

首先,在您的配方中,您需要在要扩展make变量的内容周围使用单引号。这没关系,因为make根本不关心引号,你需要这个,因为它意味着你唯一需要担心的特殊字符是单引号。

其次,您必须将字符串中的所有单引号转换为'\''形式,这将关闭当前单引号字符串,添加转义单引号,并启动新的单引号字符串。

所以,像这样:

quotestr = $(subst ','\'',$1)

help:
        @echo 'MYVAR = $(call quotestr,$(MYVAR))'

无论您将MYVAR设置为哪一组特殊字符,只要在单引号中使用,您就不应该在解析它时遇到任何错误。

答案 1 :(得分:0)

你必须逃避引号。

如果您想将'"'存储在变量中,则必须为其指定'\"'

如果您想将"存储在变量中,则必须为其指定\"