2009-10-29 13 views
6

grep'i kullanarak 'ifeq ($ (Param1)' metnini bulmalıyım Değişkeni yapmak için arama sonucu atamayı deniyorum. Sorun, tek tırnakların metinden kaçmamasıdır. Ben çalışırken o kadar olun:GNU'nun içinden grep'i çalıştıran

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

alıyorum:

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

$ $$ ile kaçtı edilebilir ama nasıl marka parantez kaçabilirsek Teşekkür

?.

NB: $ GrepResult, kural komutunda değil $ (error) işlevinde kullanılır.

+0

Ben de çalışmak için bu yardım komutu alamıyor. Bir düzeltme buldunuz mu? $ (kabuk grep ...) '? grep, awk, sort, pr'in her birini küçük harf olarak kullanın. – tarabyte

cevap

1

Gerçekten $ (shell) kullanmanız mı gerekiyor? GNU Üretme 3.81 ile test edilmiştir.

+0

üzgünüm, ben bahsetmedim, ama grep sonucunu $ (error) ile kullanıyorum ve arka tırnaklar ile sadece komut içeriğini yürütmeden değişken içerikleri çıkarır. – jackhab

6

Buradaki hile, özel karakterleri ve grep yapılarak kaçırmaktır.

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

$ $ 'ı $ $' a dönüştürün, sonra grep $ $ 'a dönüşür. Ayrıca, bu atamanın, maç sonuçlarıyla karıştırılmaması için "{}", "parantez"() "değil, küme parantezleri kullandığını unutmayın. (Orada dize işlemek için daha sağlam bir yol olabilir, ama boşver edebilirler.) Sonucu kullandığınızda, tek tırnak kullanmak

:

 
all: 
    @echo '$(GrepResult)' 

Bu da GNUMake 3,81 ile test edilmiştir.

DÜZENLEME: Bu aynı zamanda $ ile çalışır (hata ...):

 
    $(error '$(GrepResult)') 
İlgili konular