间接展开 returns 变量名而不是值

Indirect expansion returns variable name instead of value

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

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

echo ${!varname}

我应该得到“12345”。相反,输出是 "varname"。如果我删除感叹号,我会得到 "qa_ci",而不是“12345”

这应该是一个相对简单的解决方案,所以我不确定我遗漏了什么,如果有的话。

您的代码定义了 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