2013-09-23 45 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