2009-10-29 21 views
6

Potrzebuję znaleźć tekst 'ifeq ($ (Param1)' używając grep.) Próbuję przypisać wynik wyszukiwania do zmiennej.Niepewność polega na tym, że pojedyncze cytaty nie wymykają się tekstowi zrobić tak, gdy próbuję:działa grep od wewnątrz GNU make

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

uzyskać:

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

$ można uciec z $$ ale jak mogę uciec nawiasy w makijażu Dzięki

?.

NB: $ GrepResult jest używany w funkcji $ (błąd), a nie w poleceniu reguły.

+0

jestem w stanie dostać się do tego polecenia help działa. Czy znalazłeś poprawkę? '$ (grep powłoki ...)'? po prostu użyj każdego z grep, awk, sort, pr jako małe litery? – tarabyte

Odpowiedz

1

Czy naprawdę potrzebujesz użyć $ (shell)?

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

all: 
    echo ${GrepResult} 

Testowane przy użyciu GNU Make 3.81.

+0

Przepraszam, nie wspomniałem o tym, ale używam grep result z $ (error) i z back-quotes po prostu wyprowadza zmienną zawartość bez wykonywania polecenia. – jackhab

6

Sztuką jest przemycenie znaków specjalnych za pomocą Make i grep.

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

Dokonaj zwrotu $$ do $, następnie grep zamienia \ $ na $. Zwróć też uwagę, że to przypisanie używa nawiasów klamrowych "{}", a nie nawiasów "()", aby nie dać się zwieść wynikom meczu. (Nie może być bardziej wydajny sposób obsłużyć ciąg, ale nie szkodzi.)

Podczas korzystania z rezultatu, użyj apostrofów:

 
all: 
    @echo '$(GrepResult)' 

To też badano GNUMake 3.81.

EDIT: ta współpracuje również z $ (error ...):

 
    $(error '$(GrepResult)') 
Powiązane problemy