POSIXly:
superEcho() {
eval 'printf "%s\n" "$1: ${'"$1"'}"'
}
Assim como o bash -specific ${!var} , que espera que $1 tenha sido limpo e contenha um nome de variável válido. Caso contrário, isso equivale a uma vulnerabilidade de injeção de comando arbitrária.
Você pode fazer a sanitização na função:
superEcho() {
case $1 in
("" | *[!_0-9abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]* | [0-9]*)
printf >&2 'Invalid variable name: "%s"\n' "$1"
return 1;;
(*) eval 'printf "%s\n" "$1: ${'"$1"'}"'
esac
}
Note que para variáveis do tipo array ou array associativo , em bash ou ksh (POSIX sh não tem array exceto "$@" que você não poderia usar aqui como isso seria os argumentos da função superEcho propriamente dita) que somente imprime o valor do elemento de indice 0 , enquanto em zsh , que produziria a concatenação dos valores com o primeiro caractere de $IFS (e com caracteres SPC em yash ).
Em ksh , zsh , bash ou yash (as 4 shells parecidas com Bourne com suporte à matriz). Veja também typeset -p var para imprimir a definição e os atributos de uma variável.