Inna opcja: odpowiedź
NORMALSTR := $(patsubst "%",%,$(QUOTEDSTR))
Beta będzie usunąć każdy cytat w ciągu. Powyższe rozwiązanie WYŁĄCZNIE usuwa cytaty pojawiające się na początku i na końcu. Na przykład: odpowiedź
QUOTEDSTR := -DTITLE=\"Title\"
Beta będzie skutkować wartości -DTITLE=\Title\
podczas korzystania z rozwiązania patsubst wartość ta nie zostanie zmieniona.
To zależy od tego, co chcesz.
EDIT
Jeśli chcesz obsługiwać tylko spacje i nadal pasuje cytaty na początku/końca zmiennej jak na użytkownika @ stefanct komentarz, musisz zagrać kilka sztuczek. Najpierw musisz znaleźć znak spoza białej spacji, który, jak wiesz, nigdy nie pojawi się w twoim ciągu. Wybierzmy ^
, ale możesz wybrać coś innego, jeśli chcesz.
Algorytm jest: przekształcić wszystkie przestrzenie do tej postaci, a następnie usunąć cytaty z uzyskanej pojedynczej „słowo”, a następnie przekonwertować wszystkie wystąpienia tego znaku z powrotem do przestrzeni, tak:
# Get a variable S that contains a single space
E :=
S := $E $E
NORMALSTR := $(subst ^,$S,$(patsubst "%",%,$(subst $S,^,$(QUOTEDSTR))))
Oczywiście wciąż są komplikacje; to obsługuje tylko spacje na przykład, a nie inne białe znaki, takie jak TAB.
Czy cytowany ciąg zawiera znaki specjalne? Mam na myśli np. "Cytaty \" wewnątrz \ "cytowany ciąg znaków". –
@EldarAbusalimov Obecnie nie. Moja sytuacja jest dość prosta. –