首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Make:如何替换make变量中的字符?

Make:如何替换make变量中的字符?
EN

Stack Overflow用户
提问于 2014-08-28 18:33:36
回答 2查看 5.1K关注 0票数 3

我有这样一个变量:

代码语言:javascript
运行
复制
export ITEM={countryname}

这可以是:

代码语言:javascript
运行
复制
   "Albania", 
   "United States"   // with space
   "Fs. Artic Land"  // dot
   "Korea (Rep. Of)" // braket
   "Cote d'Ivoir"    // '

这个变量$(ITEM)被传递给其他命令,有些命令需要它(很好,我将使用$(ITEM)),有些命令必须有字符替换,例如,使用mkdir -p ../folder/{countryname}

代码语言:javascript
运行
复制
   "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变量

代码语言:javascript
运行
复制
export ITEM={countryname}
export escaped_ITEM=$(ITEM).processed_to_be_fine

我应该如何在makefile中替换这个字符? (为了保持简单,而不必做外部脚本)。我在考虑使用一些可转换的tr什么的。

注意:在Ubuntu上工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-28 19:09:19

您可以使用GNU中的subst函数来执行替换。

代码语言:javascript
运行
复制
escaped_ITEM := $(subst $e ,_,$(ITEM))

(其中$e是一个未定义或空的变量;感谢@EtanReisner指出它)。

但是,对于每个单独的替换,您需要一个subst

如果可能的话,我建议不要这样做--使用单个机器可读的令牌作为文件名,并将它们映射到人类可读的文件名中,作为最后一步。在makefile中,这也要容易得多:

代码语言:javascript
运行
复制
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))"
票数 4
EN

Stack Overflow用户

发布于 2014-08-28 19:29:30

在shell中使用它们时,只要输入简单的“引用”国家“名称”就可以了(对于这里所示的少数字符串来说),但是双引用任意字符串是不安全的,因为任何事情仍然可以在双引号中计算(使用make操作,即使字符串中的双引号本身也会造成问题)。

如果需要向shell传递“随机”字符串,那么它们只是一种安全的方法:将字符串中的每个'实例(单引号)替换为'\'',然后将字符串包装为' (单引号)。(这取决于字符串的使用者,用\047替换每个\047也可以。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25555686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档