2013-09-23 76 views
1

我想使用bash獲取當前的svn修訂版並將其設置爲環境變量SVN_REVISION。此環境變量可能已經設置,也可能沒有設置。如果它已經設置,然後我回應,如果沒有設置,然後我計算它,然後回聲。如果SVN_REVISION已設置,我不想重寫。我正在使用以下由於缺乏對參數擴展的理解而失敗的腳本。在bash中分配環境變量的參數擴展

#!/bin/bash 

# If no directory provided as an argument, uses the current working directory as the source directory. 
RAW_SRC_DIR=${1:-`pwd`} 
COMPUTE_REVISION=$(svn info ${RAW_SRC_DIR} | grep '^Revision' | cut -d ':' -f2 | tr -d ' ') 
echo "${COMPUTE_REVISION}" ##Gets the revision successfully 
${SVN_REVISION:="$COMPUTE_REVISION"} #Fails with message: <SVN_REVISION> command not found 
export SVN_REVISION 
echo $SVN_REVISION 

如何解決?

回答

2

${parameter:=word}語法的其中一個影響是parameter的值被替換。這意味着你的shell將嘗試執行你得到的任何數字作爲命令。只需在echo一行中完成任務,然後再放入export

echo ${SVN_REVISION:="$COMPUTE_REVISION"} 
export SVN_REVISION 
+0

合作。謝謝! –

1

爲什麼不直接做這個顯而易見的方法?

[[ -z $SVN_REVISION ]] && \ 
    SVN_REVISION=$(svn info ${1:-`pwd`} | grep '^Revision' | cut -d ':' -f2 | tr -d ' ') 
echo $SVN_REVISION 
export SVN_REVISION 

或者,如果你堅持

echo ${SVN_REVISION:=$(svn info ${1:-`pwd`} | 
         grep '^Revision' | 
         cut -d ':' -f2 | 
         tr -d ' ')} 
export SVN_REVISION 
+0

謝謝。我知道周圍的代碼與if條件將工作。也許我應該提到我正試圖追趕參數擴展,並且想要使用它。 –

+0

好的,又增加了一個。首先學習功能,然後學習何時使用它們:) – rici