Não há necessidade de usar eval
nesta instância
eval $i
forces eval
para avaliar o conteúdo de i
como um comando - é por isso que você vê erros como b: command not found
sendo relatados
A melhor maneira seria imprimir valores de parâmetro com o bash usando a variável deferenciamento
for i in a b c; do echo "$i=${!i}"; done
a=1
b=2
c=3