0

如果我有一个Adhoc.xcconfigwhere 我定义了一个变量:

PREPROCESSOR_DEFINITIONS = IS_ADHOC=1 CRASHLYTICS=1

在运行脚本中,有一个如下所示的检查:

if [ "${PREPROCESSOR_DEFINTIONS/CRASHLYTICS=1}" = "$PREPROCESSOR_DEFINITIONS" ] ; then
    echo "Crashlytics is disabled, skipping Crashlytics dSYM upload"
else
    echo "Crashlytics is on"
end

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

逐个分解 if 语句:

  • "${PREPROCESSOR_DEFINITIONS}/CRASHLYTICS=1}"- 是一个变量扩展。

  • /- 这是索引更大的变量,PREPROCESSOR_DEFINTIONS以检查变量的存在CRASHLYTICS吗?

  • = "$PREPROCESSOR_DEFINITIONS"- 这只是将此字符串文字分配给先前表达式的结果吗?

任何可以阐明该语法以及 if 语句试图完成的内容的人,那将是很棒的。

4

1 回答 1

1

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

bash参数扩展的手册页部分:

${参数/模式/字符串}

模式被扩展以产生一个模式,就像在路径名扩展中一样。 参数被扩展,模式与其值 的最长匹配被替换为字符串。[…] 如果string为 null,则删除模式匹配项,并且可以省略/ 后面的模式。[…]

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

=不是作业。这是等价比较。Bash 也支持==但是,正如手册页所说:

=可用于代替==严格的 POSIX 合规性。

所以,从技术上讲,=是更标准的。

因此,ifis 测试 ifPREPROCESSOR_DEFINTIONS 不包含 CRASHLYTICS=1. 如果它确实包含它,那么CRASHLYTICS=1删除的扩展将不等于未修改的扩展。

当然,考虑echoif.

于 2017-02-25T03:24:33.470 回答