Tanto o bash quanto o zsh têm uma maneira de realizar a expansão indireta, mas usam uma sintaxe diferente.
É fácil fazer expansão indireta usando eval
; isso funciona em todos os POSIX e na maioria dos shells Bourne. Tome cuidado para citar corretamente no caso de o valor conter caracteres que tenham um significado especial no shell.
eval "value=\"\${$VAR}\""
echo "$VAR"
echo "$value"
${${VAR}}
não funciona porque não é um recurso que qualquer shell implementa. A coisa dentro das chaves deve estar em conformidade com as regras de sintaxe que não incluem ${VAR}
. (Em zsh, isso é compatível com a sintaxe, mas faz algo diferente: substituições aninhadas executam transformações sucessivas no mesmo valor; ${${VAR}}
é equivalente a $VAR
, pois isso realiza a transformação de identidade duas vezes no valor.)