2009-10-29 24 views
6

Necesito encontrar el texto 'ifeq ($ (Param1)' usando grep. Intento asignar el resultado de búsqueda para hacer la variable. El problema es que las comillas simples no escapan el texto en por lo que cuando intento:ejecutando grep desde GNU make

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

me sale:

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

El $ se puede escapar con $$ pero ¿cómo puedo escapar paréntesis en el maquillaje Gracias

?.

NB: $ GrepResult se usa en la función $ (error), no en un comando de regla.

+0

yo soy incapaz de conseguir que el comando de ayuda para trabajar bien. ¿Has encontrado una solución? '$ (shell grep ...)'? solo use cada uno de grep, awk, sort, pr como minúsculas? – tarabyte

Respuesta

1

¿Realmente necesita usar $ (shell)?

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

all: 
    echo ${GrepResult} 

Probado con GNU Marca 3.81.

+0

lo siento, no lo mencioné, pero utilizo grep result con $ (error) y con citas entre comillas, simplemente genera los contenidos variables sin ejecutar el comando. – jackhab

6

El truco es pasar de contrabando los caracteres especiales más allá de Hacer y grep.

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

Realiza giros $$ en $, luego grep convierte \ $ en $. También tenga en cuenta que esta asignación utiliza llaves "{}", no paréntesis "()", para no confundirse con los resultados de la coincidencia. (Puede haber una manera más robusta como para manejar la cadena, pero no importa.)

Cuando se utiliza el resultado, utilice comillas simples:

 
all: 
    @echo '$(GrepResult)' 

Esto también fue probado con gnumake 3,81.

EDIT: Esto también funciona con $ (error ...):

 
    $(error '$(GrepResult)') 
Cuestiones relacionadas