Một tùy chọn khác: câu trả lời
NORMALSTR := $(patsubst "%",%,$(QUOTEDSTR))
Beta sẽ loại bỏ tất cả các trích dẫn trong chuỗi. Giải pháp trên sẽ CHỈ loại bỏ các dấu ngoặc kép xuất hiện ở đầu và cuối. Ví dụ: Câu trả lời
QUOTEDSTR := -DTITLE=\"Title\"
Beta sẽ dẫn đến một giá trị của -DTITLE=\Title\
trong khi sử dụng các giải pháp patsubst giá trị này sẽ không thay đổi.
Tùy thuộc vào những gì bạn muốn.
EDIT
Nếu bạn muốn xử lý khoảng trắng và vẫn chỉ phù hợp với dấu ngoặc kép vào đầu/kết thúc của biến theo bình luận @ stefanct, bạn sẽ phải chơi một số thủ thuật. Trước tiên, bạn cần phải tìm một ký tự không khoảng trống mà bạn biết sẽ không bao giờ xuất hiện trong chuỗi của bạn. Hãy chọn ^
nhưng bạn có thể chọn cái gì khác nếu bạn muốn.
Thuật toán là: chuyển đổi tất cả không gian để nhân vật này, sau đó loại bỏ các dấu ngoặc kép từ kết quả đơn "chữ", sau đó chuyển đổi tất cả các trường hợp của nhân vật mà lại không gian, như thế này:
# Get a variable S that contains a single space
E :=
S := $E $E
NORMALSTR := $(subst ^,$S,$(patsubst "%",%,$(subst $S,^,$(QUOTEDSTR))))
Dĩ nhiên vẫn còn những biến chứng; điều này chỉ xử lý các khoảng trống chẳng hạn, không phải các ký tự khoảng trắng khác như TAB.
Bạn có trích dẫn chuỗi bao gồm bất kỳ ký tự thoát nào không? Ý tôi là, ví dụ: "Quotes \" bên trong \ "một chuỗi trích dẫn". –
@EldarAbusalimov Hiện tại không có. Tình hình của tôi khá đơn giản. –