间接扩展返回变量名而不是值

时间:2019-06-25 17:46:15

标签: linux bash variables variable-names indirection

我正在尝试使用间接扩展设置一些变量。根据我阅读的文档,设置应该很简单:

var1=qa
qa_num=12345
varname="${var1}_ci"

echo ${!varname}

我应该得到“ 12345”。而是,输出为“ varname”。如果删除了感叹号,我将以“ qa_ci”而不是“ 12345”结束

这应该是一个相对简单的解决方案,所以我不确定是否缺少了什么。

1 个答案:

答案 0 :(得分:1)

您的代码定义了qa_num,但是varname分配引用了qa_ci。结果,您的echo正在扩展不存在的qa_ci,结果为空。更改varname分配可以解决系统上的问题。

示例:foo.sh

#!/bin/bash
var1=qa
qa_num=12345
varname="${var1}_num"     # <=== not _ci

echo "${!varname}"        # I also added "" here as a general good practice

输出:

$ bash foo.sh
12345