Bash使用另一个变量赋值变量

时间:2015-02-25 20:38:52

标签: bash variables variable-assignment

我不确定如何标题,但我要做的是将username设置为$DEV_ENVIRONMENT$STAGE_ENVIRONMENT或{{1}分别在我的属性文件中定义。

我的函数会接受一个参数($PROD_ENVIRONMENTDEVSTAGE)并根据PROD中定义的边缘检查主机名。

$_ENVIRONMENT

例如,如果我传入while IFS=',' read -ra line do for i in "${line[@]}" do if [ $(hostname) = $i ] then username="$1"_USERNAME break fi done done <<< "${1}_ENVIRONMENT" ,那么我希望DEV设置为username并且我希望$DEV_USERNAME循环搜索到while中定义的节点,这两个节点都是从我的属性文件中读取的值。

1 个答案:

答案 0 :(得分:3)

Bash支持indirection expansion,所以你可以这样做:

var=${1}_ENVIRONMENT
username=${!var}

而不是稍微繁琐且有潜在危险的评估:

eval username=\$${1}_ENVIRONMENT

所以对于你的代码:

while IFS=',' read -ra line
do
        for i in "${line[@]}"
        do
                if [ $(hostname) = $i ]
                then
                        var="$1"_USERNAME
                        username=${!var}
                        break
                fi
        done
done <<< "${1}_ENVIRONMENT"