我有这样一个变量:
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))"
发布于 2014-08-28 19:29:30
在shell中使用它们时,只要输入简单的“引用”国家“名称”就可以了(对于这里所示的少数字符串来说),但是双引用任意字符串是不安全的,因为任何事情仍然可以在双引号中计算(使用make操作,即使字符串中的双引号本身也会造成问题)。
如果需要向shell传递“随机”字符串,那么它们只是一种安全的方法:将字符串中的每个'
实例(单引号)替换为'\''
,然后将字符串包装为'
(单引号)。(这取决于字符串的使用者,用\047
替换每个\047
也可以。)
https://stackoverflow.com/questions/25555686
复制相似问题