Como posso configurar essa verificação de variável set / unset em uma função?

0

Como link disse,

$ if [ -z ${aaa+x} ]; then echo "aaa is unset"; else echo "aaa is set"; fi 
aaa is unset

pode testar se uma variável aaa está definida ou não definida.

Como posso envolver a verificação em uma função? No bash, a seguinte expansão de parâmetro aninhada não funciona:

$ function f() { if [ -z ${$1+x} ]; then echo "$1 is unset"; else echo "$1 is set"; fi }; 
$ f aaa
bash: ${$1+x}: bad substitution

Obrigado.

    
por Tim 13.11.2018 / 16:06

2 respostas

2

O teste -v em bash será verdadeiro se a variável nomeada tiver sido definida.

if [ -v aaa ]; then
    echo 'The variable aaa has been set'
fi

De help test em bash :

-v VAR True if the shell variable VAR is set.

Como uma função:

testset () {
    if [ -v "$1" ]; then
        printf '%s is set\n' "$1"
    else
        printf '%s is not set\n' "$1"
    fi
}

Como um script para o fornecimento:

if [ -v "$1" ]; then
    printf '%s is set\n' "$1"
else
    printf '%s is not set\n' "$1"
fi

Usando este último script:

source ./settest variablename
    
por 14.11.2018 / 00:07
3

Use indireto:

function f() { if [ -z "${!1+x}" ]; then echo "$1 is unset"; else echo "$1 is set"; fi };

Isso testa a variável nomeada pelo primeiro parâmetro da função. Você pode querer verificar se o usuário forneceu um argumento para a função.

    
por 13.11.2018 / 16:50