我有一个变量,比如:
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
所以我需要一个新的制造变量,比如
export ITEM={countryname}
export escaped_ITEM=$(ITEM).processed_to_be_fine
我应该如何在我的makefile中进行字符替换(保持简单,不必执行外部脚本)。我在想用一些前奏曲tr
什么的。
注意:在Ubuntu上工作。
您可以使用GNUMake中的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))"
给定输入,在shell中使用时只需"引用"国家/地区的"名称"就可以了(对于此处显示的少数字符串),但双引号任意字符串是不安全的,因为任何数量的东西都可以在双引号内计算(按照make的操作方式,即使字符串中的双引号本身也会引起问题)。
如果您需要将"随机"字符串传递到shell,那么只有一种安全的方法:将字符串中'
(单引号)的每个实例替换为'''
,然后用'
(双引号)包裹字符串。(根据字符串的使用者,用