Primeiro, uma palavra de cautela:
Do ponto de vista de segurança, é uma péssima idéia usar eval
em qualquer script de shell a menos que você saiba exatamente o que está fazendo. (E, mesmo assim, praticamente não há instâncias em que essa é realmente a melhor solução.) Como um iniciante no shell de scripts, por favor, esqueça que eval
existe mesmo.
Para ler mais, consulte questões de segurança e comando do Eval .
Para obter a saída d
, você pode usar:
eval echo \$${!a}
Ou:
eval eval echo \\$\$$a
Onde você errou, passou os caracteres dos parênteses sem escape para echo
. Se eles forem precedidos por um $
sem aspas, será a substituição do comando. Mas se o $
for citado e não os parênteses, não é uma sintaxe de shell válida.