我有以下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)
答案 0 :(得分:2)
如果你想要一个完全通用的引用机制,那么你必须这样做:
首先,在您的配方中,您需要在要扩展make变量的内容周围使用单引号。这没关系,因为make根本不关心引号,你需要这个,因为它意味着你唯一需要担心的特殊字符是单引号。
其次,您必须将字符串中的所有单引号转换为'\''
形式,这将关闭当前单引号字符串,添加转义单引号,并启动新的单引号字符串。
所以,像这样:
quotestr = $(subst ','\'',$1)
help:
@echo 'MYVAR = $(call quotestr,$(MYVAR))'
无论您将MYVAR
设置为哪一组特殊字符,只要在单引号中使用,您就不应该在解析它时遇到任何错误。
答案 1 :(得分:0)
你必须逃避引号。
如果您想将'"'
存储在变量中,则必须为其指定'\"'
。
如果您想将"
存储在变量中,则必须为其指定\"
。