2009-10-29 69 views
6

我需要找到文本'ifeq($(Param1)' using grep。我试图分配搜索结果来创建变量。问题是单引号不能转义文本赚那么当我尝试:从GNU内部运行grep make

GrepResult:= $(shell grep 'ifeq ($$(Param1)' TextFile) 

我得到:

Makefile:214: *** unterminated call to function `shell': missing `)'. Stop. 

的$可以用$$转义但我怎么化妆中逃脱括号 感谢

NB:$ GrepResult在$(错误)函数中使用,而不是在规则的命令。

+0

我无法得到这种帮助命令来工作的。你有没有找到解决办法? '$(shell grep ...)'?只是使用grep的每一个,AWK,排序,PR为小写的? – tarabyte 2015-07-25 05:10:49

回答

1

你真的需要使用$(壳)?

GrepResult:= `grep 'ifeq (\$$(Param1)' TextFile` 

all: 
    echo ${GrepResult} 

测试了GNU Make 3.81。

+0

对不起,我没有提到它,但我用$(错误),并与反引号它只是输出变量内容,不执行命令grep的结果。 – jackhab 2009-10-29 14:59:13

6

诀窍是走私特殊字符过去让 grep的。

 
GrepResult := ${shell grep 'ifeq (\$$(Param1)' TextFile} 

将$$变成$,然后grep将\ $变成$。还要注意的是这种分配使用大括号“{}”,而不是括号“()”,以免在比赛的结果混淆。 (有可能是处理字符串更健壮的方式,不过没关系。)

当您使用的结果,使用单引号:

 
all: 
    @echo '$(GrepResult)' 

这也与gnumake的3.81测试。

编辑: 这也适用于$(错误...):

 
    $(error '$(GrepResult)')