在我的构建设置中,我定义了一些预处理器宏
即。的 SANDBOX_ENV = 1
我想在shell脚本中使用SANDBOX_ENV的值。
我尝试过echo "SANDBOX value is = ${GCC_PREPROCESSOR_DEFINITIONS}"
但它给了我所有的宏值,如DEBUG=1 SANDBOX_ENV=1 COCOAPODS=1
我想使用分配给SANDBOX_ENV的值
答案 0 :(得分:7)
试试这个:
#!/bin/bash
GCC_PREPROCESSOR_DEFINITIONS="DEBUG=1 SANDBOX_ENV=1 COCOAPODS=1"
# delete everything before our value ans stuff into TMPVAL
TMPVAL="${GCC_PREPROCESSOR_DEFINITIONS//*SANDBOX_ENV=/}"
# remove everything after our value from TMPVAL and return it
TMPVAL="${TMPVAL// */}"
echo $TMPVAL; #outputs 1
HTH,
bovako
答案 1 :(得分:3)
您应该可以使用awk或其他东西轻松解析它,但这就是我的方法:
echo $GCC_PREPROCESSOR_DEFINITIONS | grep -Po 'SANDBOX_ENV=\d+' | sed 's/SANDBOX_ENV=//'
在你的echo环境中:
echo "SANDBOX value is $(echo $GCC_PREPROCESSOR_DEFINITIONS | grep -Po 'SANDBOX_ENV=\d+' | sed 's/SANDBOX_ENV=//')"
基本上我用管道传输了GCC_PREPROCESSOR_DEFINITIONS的内容并且插入了SANDBOX_ENV部分。
grep -P
是使用Perl正则表达式\ d +,因为我不喜欢POSIX。只是一个偏好。基本上是什么
grep -P 'SANDBOX_ENV=\d+'
的目的是找到包含字符串“SANDBOX_ENV =”及其后续任意位数的内容管道中的行。如果该值可能包含字母数字,您可以将数字的\ d更改为包含a-zA-Z0-9的单词的\ w,然后得到:
grep -Po 'SANDBOX_ENV=\w+'
+只表示必须至少有一个由前面的字符指定的类型的字符,包括匹配的所有后续字符。
grep -Po中的-o(仅匹配)用于隔离匹配,这样您只需获得“SANDBOX_ENV = 1”而不是整行。
然后将此输出传送到sed命令,在那里我进行简单的查找和替换,将“SANDBOX_ENV =”替换为“”,只留下它后面的值。可能更容易用awk做这个,但你必须自己学习。
答案 2 :(得分:2)
如果您想在构建设置中包含一些自包含的东西,并且您不介意轻微间接,那么:
SANDBOX_ENV=1
(或您想要的任何值)SANDBOX_ENV=${SANDBOX_ENV}
在你的shell中,要进行测试,请执行
echo ${SANDBOX_ENV}
使用用户定义的设置,您仍然可以修改构建配置和体系结构的值。因此,例如,您可以使Debug配置为SANDBOX_ENV = 0,Release为SANDBOX_ENV = 1.
答案 3 :(得分:1)
可能是明显的答案,但你只是尝试过:
echo ${SANDBOX_ENV}
如果这不起作用,请尝试使用eval:
eval "${GCC_PREPROCESSOR_DEFINITIONS}"
echo ${SANDBOX_ENV}