参数扩展以在bash中分配环境变量

时间:2013-09-23 23:15:59

标签: bash shell svn parameters expansion

我想使用bash获取当前的svn修订版,并将其设置为环境变量SVN_REVISION。此环境变量可能已设置,也可能未设置。如果它已经设置然后我回应,如果没有设置然后我计算它然后回声它。如果已经设置了SVN_REVISION,我不想覆盖。我正在使用以下脚本,由于我对参数扩展缺乏了解而失败。

#!/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 个答案:

答案 0 :(得分:2)

${parameter:=word}语法的一个影响是parameter的值被替换。这意味着你的shell将尝试执行你获得的任何数字作为命令。只需在echo行中进行分配,然后再添加export

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

答案 1 :(得分: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