从https://stackoverflow.com/a/10820494/1764881开始,我知道标准的做法似乎是:
var="SAMPLE$i"
echo ${!var}
但是,我似乎无法做以下任何形式。他们都失败了:
echo ${!SAMPLE$i}
echo ${!"SAMPLE$i"}
我阅读了bash手册页,但我仍然无法理解。第一种形式是唯一接受的形式是真的吗?
答案 0 :(得分:2)
是。基本逻辑是所有参数扩展将单个文字作为要扩展的参数的名称,并且任何其他运算符对结果执行某些操作。 !
也不例外; var
照常展开,但结果再次展开。
(顺便说一下,偶数数组也遵循这条规则。似乎像${array[2]%foo}
这样的东西会将两个运算符应用于array
,但实际上array[2]
被视为单个运算符的名称参数。 little 之间存在差异,因为索引可以是任意算术表达式而不是文字数。)
(为了完整起见,我应该提到实际的例外,${!prefix*}
和${!name[*]}
,它们混淆地使用相同的运算符!
来查询变量本身。第一个列出变量名称,以...开头相同的前缀;第二个列出命名数组的键。)