Você precisa usar expansão de parâmetro indireta com !
:
tmp=h_$i
echo "${!tmp}
Você tem que fazer a variável tmp
extra aqui - você não pode simplesmente usar uma string, infelizmente. A expansão indireta funciona da seguinte forma:
If the first character of parameter is an exclamation point (!), a level of variable indirection is introduced. Bash uses the value of the variable formed from the rest of parameter as the name of the variable; this variable is then expanded and that value is used in the rest of the substitution, rather than the value of parameter itself. This is known as indirect expansion.
Portanto, acima, ${!tmp}
expande para o valor da variável cujo nome é dado pelo valor da variável tmp
.
Também é possível usar eval
aqui, mas a indireção a abordagem é mais organizada.