我不知道我是否正確描述的問題,但目前我以下列方式如何在Makefile中將引用字符串轉換爲正常字符串?
QUOTEDSTR := "hello world"
NORMALSTR := $(shell echo $(QUOTEDSTR))
解決這個問題有沒有更內置的方式,「使」可以做到這一點,而不調用shell ?由於
我不知道我是否正確描述的問題,但目前我以下列方式如何在Makefile中將引用字符串轉換爲正常字符串?
QUOTEDSTR := "hello world"
NORMALSTR := $(shell echo $(QUOTEDSTR))
解決這個問題有沒有更內置的方式,「使」可以做到這一點,而不調用shell ?由於
另一種選擇:
NORMALSTR := $(patsubst "%",%,$(QUOTEDSTR))
測試版的答案將刪除所有報價的字符串中。上述解決方案將僅刪除出現在開頭和結尾處的引號。例如:
QUOTEDSTR := -DTITLE=\"Title\"
貝塔的回答將導致-DTITLE=\Title\
一個值,而使用patsubst解決這個值不會改變。
這取決於你想要什麼。
編輯
如果你想處理的空白,也是目前唯一匹配的可變的開始/結束引號按@ 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))
,因爲你沒有定義$ \變量,所以它是空字符串
$\"
避免語法高亮問題編輯器。
",,$(QUOTEDSTR))
將被編輯器識別爲字符串,直到找到另一個"
。
你引用的字符串是否包含任何轉義字符?我的意思是,例如「報價單」在「一個帶引號的字符串」裏面。 –
@EldarAbusalimov目前沒有。我的情況很簡單。 –