Eu escrevi uma pequena função que sai se o valor do argumento da função estiver vazio, gostaria de poder imprimir também o nome do parâmetro (não o valor!) nome do parâmetro.
function exitIfEmpty()
{
if [ -z "$1" ]
then
echo "Exiting because ${!1} is empty"
exit 1
fi
}
quando chamado assim
exitIfEmpty someKey
deve imprimir
Exiting because someKey is empty
O que é passado para a função é apenas uma string. Se você executar
func somevar
, o que é passado é a stringsomevar
. Se você executarfunc $somevar
, o que é passado é (a divisão de palavras) o valor da variávelsomevar
. Nem é uma referência de variável, um ponteiro ou qualquer coisa assim, são apenas strings.Se você quiser passar o nome de uma variável para uma função e, em seguida, examinar o valor dessa variável, precisará usar um nameref (Bash 4.3 ou posterior, IIRC) ou uma referência indireta
${!var}
.${!var}
expande para o valor da variável cujo nome está armazenado emvar
.Então, você só está errado no script, se você passar o nome de uma variável para function, use
"${!1}"
para obter o valor da variável nomeada em$1
, e plain"$1"
para obter o nome .Por exemplo, isso imprimirá
variable bar is empty, exiting
e sairá do shell:Passe o nome como segundo argumento
deve fazer o truque.