的特定值在我的生成設置我有定義一些預處理宏獲取預處理器宏
即SANDBOX_ENV = 1
我想用SANDBOX_ENV的價值在我的shell腳本。
我已經回聲試圖"SANDBOX value is = ${GCC_PREPROCESSOR_DEFINITIONS}"
但它給我像DEBUG=1 SANDBOX_ENV=1 COCOAPODS=1
我想使用分配給SANDBOX_ENV
的特定值在我的生成設置我有定義一些預處理宏獲取預處理器宏
即SANDBOX_ENV = 1
我想用SANDBOX_ENV的價值在我的shell腳本。
我已經回聲試圖"SANDBOX value is = ${GCC_PREPROCESSOR_DEFINITIONS}"
但它給我像DEBUG=1 SANDBOX_ENV=1 COCOAPODS=1
我想使用分配給SANDBOX_ENV
值試試這個所有的宏值:
#!/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
會試試這個... – 2014-12-11 10:10:39
不錯的一個!任何參考我可以在哪裏閱讀更多關於bash「$ {...}'及其與'//'運算符的用法? – adib 2015-10-28 06:42:37
man bash :) @adib 在手冊頁中,搜索「Parameter Expansion」以獲得正確的部分; $ {parameter/pattern/string} 模式替換。該模式擴大產生一個拍打... – 2015-11-05 11:27:55
您應該能夠使用awk或一些簡單地分析它,但在這裏就是我會做它:
echo $GCC_PREPROCESSOR_DEFINITIONS | grep -Po 'SANDBOX_ENV=\d+' | sed 's/SANDBOX_ENV=//'
在您的迴音方面:
echo "SANDBOX value is $(echo $GCC_PREPROCESSOR_DEFINITIONS | grep -Po 'SANDBOX_ENV=\d+' | sed 's/SANDBOX_ENV=//')"
我基本上管道GCC_PREPROCESSOR_DEFINITIONS的內容和grepped的SANDBOX_ENV部分。
grep -P
是使用Perl正則表達式\ d +,因爲我不喜歡POSIX。只是一個偏好。本質上講
grep -P 'SANDBOX_ENV=\d+'
確實是找到了內容的行管道輸送到一個包含字符串「SANDBOX_ENV =」和任何其後面的位數。如果該值可能包含字母,數字,您可以更改\ d的數字來\ W一個字,其包括A-ZA-Z0-9,你會得到:
grep -Po 'SANDBOX_ENV=\w+'
的+只是意味着必須有至少一個字符由它前面的字符指定的類型,包括所有匹配的後續字符。
在grep的-Po的-o(僅匹配)被用來隔離比賽,這樣,而不是整個行,你剛剛獲得「SANDBOX_ENV = 1」。
然後將此輸出傳送到sed命令,我在其中執行簡單查找並替換將「SANDBOX_ENV =」替換爲「」的位置,只留下後面的值。使用awk可能有更簡單的方法,但你必須自己學習。
可能是明顯的答案,但你只是嘗試:
echo ${SANDBOX_ENV}
如果還是不行,請嘗試使用eval:
eval "${GCC_PREPROCESSOR_DEFINITIONS}"
echo ${SANDBOX_ENV}
除非'GCC_PREPROCESSOR_DEFINITIONS'的值保證是安全的,否則這是潛在的危險。 – 2014-12-11 02:14:03
這在預處理器宏的情況下不起作用。 – 2014-12-11 10:10:13
如果你想擁有自己的東西包含在生成設置,您不介意輕微間接,然後:
SANDBOX_ENV=1
(或任何你想要的值)SANDBOX_ENV=${SANDBOX_ENV}
在您的外殼,測試,做
echo ${SANDBOX_ENV}
與用戶定義的設置,你仍然可以修改構建配置和體系結構的值。因此,例如,您可以使Debug配置爲SANDBOX_ENV = 0,Release爲SANDBOX_ENV = 1。
可以解析的$ {} GCC_PREPROCESSOR_DEFINITIONS的字面意義?您可以在shell腳本中將該文字值作爲命令執行。然後,相應的shell環境變量將被設置爲這些值。 (不記得手頭的語法......) – 2014-12-09 09:22:49
我不知道shell腳本。將嘗試搜索命令。 – 2014-12-09 09:29:07