繁体   English   中英

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

[英]Parameter expansion to assign environment variable in bash

我想使用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

我如何解决它?

${parameter:=word}语法的作用之一是替换了parameter的值。 这意味着您的shell将尝试执行从命令中获得的任何数字。 只需在echo行中进行分配,然后再export

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

为什么不以明显的方式来做呢?

[[ -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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM