如果我有一个Adhoc.xcconfig
定义了一个变量:
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
如果语句检查该怎么办?我不清楚
/
是特定于bash还是xcconfig的语法。还令人困惑的是,if语句正在使用=
而不是==
检查赋值的结果。细分if语句:
"${PREPROCESSOR_DEFINITIONS}/CRASHLYTICS=1}"
-是变量扩展。/
-此索引是否是较大变量PREPROCESSOR_DEFINTIONS
的索引,以检查CRASHLYTICS
变量是否存在?= "$PREPROCESSOR_DEFINITIONS"
-这是否只是将此字符串文字分配给先前表达式的结果?任何可以阐明该语法以及if语句试图完成的事情的人,都很棒。
最佳答案
这都是关于bash
的,而不是xcconfig文件。 xcconfig
文件仅建立构建设置。默认情况下,构建设置作为环境变量导出到运行脚本的构建阶段。那是两者之间的唯一关系。 xcconfig文件的格式仅在读取xcconfig文件时才相关。
在参数扩展的bash
手册页部分中:
$ {parameter / pattern / string}
与路径名扩展一样,扩展模式以产生模式。扩展参数,并将模式与其值的最长匹配项替换为字符串。 […]如果string为null,则删除模式匹配项,并且/后面的模式可以省略。 […]
因此,"${PREPROCESSOR_DEFINTIONS/CRASHLYTICS=1}"
展开PREPROCESSOR_DEFINTIONS
,但从结果字符串中删除CRASHLYTICS=1
的所有实例。
单个=
未分配。这是平等比较。 Bash还支持==
,但正如手册页所述:
为了严格遵守POSIX,可以使用=
代替==
。
因此,从技术上讲,=
是更标准的。
因此,if
正在测试PREPROCESSOR_DEFINTIONS
是否不包含CRASHLYTICS=1
。如果确实包含它,则删除了CRASHLYTICS=1
的扩展将不等于未修改的扩展。
当然,考虑到echo
的每个分支中的if
语句,这是有道理的。
关于ios - XCConfig语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42449896/