Sem ler todos os seus comentários, respondo apenas à sua pergunta inicial.
Em bash , o operador para a indirecção de variáveis é ! , consulte este exemplo simples de script foo :
#!/bin/bash
bar=2
echo "${!bar}"
Como uma nota secundária: Em (meu shell favorito) zsh , você pode usar o Sinalizador de Expansão do Parâmetro P para obter este resultado
#!/bin/zsh
bar=2
echo "${(P)bar}"
Mas você também pode usar uma abordagem diferente, a terceira linha também pode ler echo "${@[$bar]}" .
Aqui você pode pensar em "$@" como uma matriz de "$1" "$2" "$3" ... , portanto, "${@[2]}" é equivalente a "$2" .
No entanto, os dois scripts foo produzem o mesmo resultado:
$ ./foo one two three
two