2009-10-29 43 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)')