Use o comando eval
.
eval "echo \${machine${counter[0]}}"
Observe que o primeiro $
é escapado para que não seja avaliado até que eval
processe a string.
A maneira como isso funciona é que eval
executa um comando da mesma forma como se você tivesse digitado no prompt de comando. A diferença é que o comando que é executado pode ser construído programaticamente.
Portanto, no seu cenário, quando eval
é executado no comando, o comando que está em execução na verdade é semelhante a: echo ${machineBLAH}
. A substituição de variável interna já foi executada separadamente pelo shell antes eval
é executado.
Para obter mais informações, consulte esta outra postagem: Qual é o comando "eval" no bash? .