首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XCConfig语法

XCConfig语法
EN

Stack Overflow用户
提问于 2017-02-24 23:17:44
回答 1查看 1.1K关注 0票数 0

如果我有一个Adhoc.xcconfig,其中定义了一个变量:

代码语言:javascript
复制
PREPROCESSOR_DEFINITIONS = IS_ADHOC=1 CRASHLYTICS=1

在运行脚本中,有一个检查看起来是:

代码语言:javascript
复制
if [ "${PREPROCESSOR_DEFINTIONS/CRASHLYTICS=1}" = "$PREPROCESSOR_DEFINITIONS" ] ; then
    echo "Crashlytics is disabled, skipping Crashlytics dSYM upload"
else
    echo "Crashlytics is on"
end

如果语句检查的话会怎么样?我不清楚/是特定于bash还是xcconfig的语法。同样令人困惑的是,if语句正在使用=而不是==检查赋值的结果。

将if语句一片片地分解:

  • "${PREPROCESSOR_DEFINITIONS}/CRASHLYTICS=1}" -是一个可变的扩展。
  • / -这个索引是更大的变量,PREPROCESSOR_DEFINTIONS来检查CRASHLYTICS变量的存在吗?
  • = "$PREPROCESSOR_DEFINITIONS" --这仅仅是将这个字符串文本分配给前一个表达式的结果吗?

任何能够解释这个语法的人,以及if语句试图实现的目标,都会很棒。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-25 03:24:33

这都是关于bash的,而不是xcconfig文件。xcconfig文件只建立一个生成设置。默认情况下,生成设置作为环境变量导出到运行脚本生成阶段。这是两者之间唯一的关系。只有在读取xcconfig文件时,xcconfig文件的格式才是相关的。

来自bash手册页关于参数展开的部分:

${参数/模式/字符串} 模式被展开以产生一个模式,就像在路径名称展开中一样。参数进行扩展,并将模式与其值的最长匹配替换为string。…如果字符串为null,则删除模式匹配,可以省略/后续模式。…

因此,"${PREPROCESSOR_DEFINTIONS/CRASHLYTICS=1}"扩展PREPROCESSOR_DEFINTIONS,但从结果字符串中删除CRASHLYTICS=1的所有实例。

单个=不是赋值。这是相等的比较。Bash也支持==,但是,如手册页所述:

为了严格遵守POSIX,可以使用=代替==

因此,从技术上讲,=是更标准的。

因此,if正在测试PREPROCESSOR_DEFINTIONS 是否包含 CRASHLYTICS=1。如果它包含它,那么删除CRASHLYTICS=1的扩展将不等于未修改的扩展。

当然,考虑到echo语句在if的每个分支中,这是有意义的。

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

https://stackoverflow.com/questions/42449896

复制
相关文章

相似问题

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