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.