【问题标题】:Parameter expansion to assign environment variable in bash参数扩展以在 bash 中分配环境变量
【发布时间】:2013-09-23 23:15:59
【问题描述】:

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

我该如何解决?

【问题讨论】:

    标签: bash shell svn parameters expansion


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      为什么不直接做呢?

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

      【讨论】:

      • 谢谢。我知道带有 if 条件的周围代码会起作用。也许我应该提到我正在努力赶上参数扩展,并想使用它。
      • 好的,添加了另一个。先学习特性,再学习何时使用它们:)
      猜你喜欢
      • 1970-01-01
      • 2015-08-24
      • 2010-09-11
      • 2019-07-07
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 2018-07-23
      • 1970-01-01
      相关资源
      最近更新 更多