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? .