쉘을 호출하지 않고이 작업을 수행 할 수있는 '확인'이 더 내장 방법이 있나요 내가 질문을 제대로 설명했는지 잘 모르겠지만, 현재 나는 다음과 같은 방법Makefile에서 인용 문자열을 일반 문자열로 변환하는 방법은 무엇입니까?
QUOTEDSTR := "hello world"
NORMALSTR := $(shell echo $(QUOTEDSTR))
이 문제를 해결하고 ? 감사합니다
쉘을 호출하지 않고이 작업을 수행 할 수있는 '확인'이 더 내장 방법이 있나요 내가 질문을 제대로 설명했는지 잘 모르겠지만, 현재 나는 다음과 같은 방법Makefile에서 인용 문자열을 일반 문자열로 변환하는 방법은 무엇입니까?
QUOTEDSTR := "hello world"
NORMALSTR := $(shell echo $(QUOTEDSTR))
이 문제를 해결하고 ? 감사합니다
또 다른 옵션 :
NORMALSTR := $(patsubst "%",%,$(QUOTEDSTR))
베타의 대답은 문자열의 모든 견적을 제거합니다. 위의 솔루션은 시작과 끝 부분에 나타나는 따옴표 만 제거합니다. 예를 들어이 값이 변경되지 않습니다 patsubst는 솔루션을 사용하는 동안
QUOTEDSTR := -DTITLE=\"Title\"
베타의 대답은 -DTITLE=\Title\
의 값을 발생합니다.
원하는 항목에 따라 다릅니다.
편집
당신이 공백을 처리하는 및 여전히 @ stefanct의 의견에 따라 변수의 시작/끝 부분에 따옴표를 일치하는 경우, 당신은 몇 가지 트릭을 재생해야합니다. 먼저 문자열에 나타나지 않을 공백이 아닌 문자를 찾아야합니다. ^
을 선택하되 원하는 경우 다른 것을 선택할 수 있습니다.
알고리즘입니다 : 물론
# Get a variable S that contains a single space
E :=
S := $E $E
NORMALSTR := $(subst ^,$S,$(patsubst "%",%,$(subst $S,^,$(QUOTEDSTR))))
: 다음과 같이 공간으로 다시 그 문자의 모든 인스턴스를 변환 한 후 그 결과 하나의 "단어"에서 따옴표를 제거,이 문자로 모든 공간을 변환 여전히 합병증이 있습니다. 예를 들어 공백 만 처리하고 TAB과 같은 다른 공백 문자는 처리하지 않습니다.
대답의 압축 된 버전은 다음과 같습니다. NORMALSTR = $ (QUOTEDSTR :"% "= %) 기본적으로 동일합니다. – dirac3000
이 그것을 수행해야합니다
NORMALSTR := $(subst $\",,$(QUOTEDSTR))
좋아요. 그것은 작동합니다. $ \ "의 의미를 설명해 주시겠습니까? –
모든 답변에 아직 문제가 있습니다. patsubst
"[f] inds 공백으로 구분 된 단어"이므로 @MadScientist의 간단한 해결책은 "hello world"
과 같은 문자열에는 작동하지 않습니다. 반면에 @Beta에 의한 것은 모든 위치에 관계없이 모든 인용 문자를 제거합니다.
아래 코드는 공백이있는 문자열을 처리하는 방법을 보여줍니다. 그러나 단어의 끝에있는 다른 따옴표 문자도 제거합니다. 예를 들어 "hello "world"3"
은 hello world"3
으로 변환됩니다. 그게 더 나아진다면 ... 모르겠어. 아마 그렇지 않아.
대신 다른 솔루션 대신이 문자열을 직접 바꾸는 대신 unquote
이라는 사용자 함수를 만듭니다.
quoted="hello world"
unquote = $(patsubst "%,%,$(patsubst %",%,$(1)))
#unquote = $(subst $\",,$(1))
#unquote = $(patsubst "%",%,$(1))
#unquote = $(shell echo $(1))
unquoted = $(call unquote,$(quoted))
$(info Variable quoted is $(quoted))
$(info Variable unquoted is $(unquoted))
이것은 단순히 모든 (분리 공백)의 시작과 끝 모두 인용 문자 단어를보고 제거합니다.
NORMALSTR := $(subst $\",,$(QUOTEDSTR))
동일
NORMALSTR := $(subst ",,$(QUOTEDSTR))
에 당신은 $ \ 변수를 정의하지 않았다, 그래서 널 (null) 문자열을 편집기에서 강조 문제를 구문
$\"
피하고을하기 때문이다.
",,$(QUOTEDSTR))
은 다른 사람이 "
을 찾을 때까지 편집기에 의해 문자열로 인식됩니다.
인용 문자열에 이스케이프 문자가 포함되어 있습니까? 내 말은. \ "따옴표 붙은 문자열 안에"\ "따옴표 \"가 있습니다. –
@ EldarAbusalimov 현재 없습니다. 제 상황은 아주 간단합니다. –