我有这样一个变量:
export ITEM={countryname}
这可以是:
"Albania",
"United States" // with space
"Fs. Artic Land" // dot
"Korea (Rep. Of)" // braket
"Cote d'Ivoir" // '
这个变量$(ITEM)
被传递给其他命令,有些命令需要它(很好,我将使用$(ITEM)
),有些命令必须有字符替换,例如,使用mkdir -p ../folder/{countryname}
:
"Albania" // => Albania
"United States" // => United_States
"Fs. Artic Land" // => Fs\._Artic_Land
"Korea (Rep. Of)" // => Korea_\(Rep\._Of\)
"Cote d'Ivoire" // => Cote_d\'Ivoire
所以我需要一个新的make变量
export ITEM={countryname}
export escaped_ITEM=$(ITEM).processed_to_be_fine
我应该如何在makefile中替换这个字符? (为了保持简单,而不必做外部脚本)。我在考虑使用一些可转换的tr
什么的。
注意:在Ubuntu上工作。
发布于 2014-08-28 19:09:19
您可以使用GNU中的subst
函数来执行替换。
escaped_ITEM := $(subst $e ,_,$(ITEM))
(其中$e
是一个未定义或空的变量;感谢@EtanReisner指出它)。
但是,对于每个单独的替换,您需要一个subst
。
如果可能的话,我建议不要这样做--使用单个机器可读的令牌作为文件名,并将它们映射到人类可读的文件名中,作为最后一步。在makefile中,这也要容易得多:
human_readable_us=United States
human_readable_kr=Korea (Rep. of)
human_readable_ci=Côte d'Ivoire
human_readable_tf=FS. Antarctic Lands
stuff:
echo "$(human_readable_$(ITEM))"
https://stackoverflow.com/questions/25555686
复制相似问题