2009-10-29 31 views
6

Tôi cần tìm văn bản 'ifeq ($ (Param1)' bằng grep. Tôi cố gắng gán kết quả tìm kiếm để tạo biến. Vấn đề là dấu nháy đơn không thoát khỏi văn bản làm như vậy khi tôi cố gắng:chạy grep từ bên trong GNU tạo

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

tôi nhận được:

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

Các $ có thể trốn thoát với $$ nhưng làm thế nào để thoát khỏi dấu ngoặc đơn trong make Cảm ơn

?.

NB: $ GrepResult được sử dụng trong hàm $ (lỗi), không phải trong lệnh quy tắc.

+0

Tôi không thể nhận được rằng sự giúp đỡ lệnh để làm việc một trong hai. Bạn đã tìm thấy bản sửa lỗi chưa? '$ (shell grep ...)'? chỉ sử dụng từng grep, awk, sort, pr là chữ thường? – tarabyte

Trả lời

1

Bạn có thực sự cần sử dụng $ (shell) không?

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

all: 
    echo ${GrepResult} 

Thử nghiệm bằng GNU Hãy làm cho 3,81.

+0

xin lỗi, tôi đã không đề cập đến nó, nhưng tôi sử dụng kết quả grep với $ (lỗi) và với dấu ngoặc kép nó chỉ đơn giản là kết quả đầu ra nội dung biến mà không thực hiện lệnh. – jackhab

6

Bí quyết là buôn lậu các ký tự đặc biệt qua Make grep.

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

Đổi thành $$ thành $, sau đó chuyển grep \ $ thành $. Cũng lưu ý rằng nhiệm vụ này sử dụng dấu ngoặc nhọn "{}", không phải dấu ngoặc đơn "()", để không bị nhầm lẫn bởi kết quả của trận đấu. (Có thể có một cách mạnh mẽ hơn để xử lý chuỗi, nhưng không bao giờ bận tâm.)

Khi bạn sử dụng kết quả, sử dụng dấu ngoặc đơn:

 
all: 
    @echo '$(GrepResult)' 

này quá đã được thử nghiệm với gnumake 3,81.

EDIT: này cũng làm việc với $ (lỗi ...):

 
    $(error '$(GrepResult)') 
Các vấn đề liên quan