为什么 bash 间接扩展必须使用临时变量?

Why bash indirect expansion has to use temp variable?

从,我知道标准的做法似乎是:

   var="SAMPLE$i"
   echo ${!var}

但是,我似乎无法完成以下任何表格。他们都失败了:

echo ${!SAMPLE$i}
echo ${!"SAMPLE$i"}

我阅读了 bash 手册页,但仍然无法理解。第一种形式是唯一被接受的形式吗?

是的。基本逻辑是 all 参数扩展采用单个文字词作为要扩展的参数的名称,并且任何其他运算符都会对结果执行某些操作。 !也不例外; var 照常展开,但 结果 再次展开。

(顺便说一句,即使数组也遵循此规则。看起来 ${array[2]%foo} 将两个运算符应用于 array,但实际上 array[2] 被视为一个参数。有一个 区别,因为索引允许是任意算术表达式而不是文字数字。)

(为了完整起见,我应该提到实际的异常,${!prefix*}${!name[*]},它们混淆地使用相同的运算符 ! 来查询变量本身。第一个列出变量名称以相同的前缀开头;第二个列出命名数组的键。)