Como testar se o IFS não está definido em ksh93?

3

Parece fácil testar se uma variável não está definida. Eu conheço pelo menos três maneiras:

#!/bin/ksh
unset var
[ "$#" -gt 0 ]               && var=$1
[ "${var+set}" != "${var}" ] && echo set1 || echo unset1
[ "${var+set}" ]             && echo set2 || echo unset2
[[ -v var ]]                 && echo set3 || echo unset3

execute:

$ ./script
unset1
unset2
unset3

tente também com ./script '' e ./script 'value' .

mas apenas altere o nome da variável para IFS e todos os três testes falharão:

#!/bin/ksh
unset IFS
[ "$#" -gt 0 ]               && IFS=$1
[ "${IFS+set}" != "${IFS}" ] && echo set1 || echo unset1
[ "${IFS+set}" ]             && echo set2 || echo unset2
[[ -v IFS ]]                 && echo set3 || echo unset3

Existe uma maneira de realmente testar se IFS não está definido em ksh93?

    
por Isaac 07.10.2018 / 11:36

1 resposta

1

Sim, é possível. Uma maneira (talvez não a mais fácil, mas funciona) é verificar a lista de todas as variáveis, se ela contém a variável:

if [[ 'set | grep ^IFS= | wc -l' == 0 ]]; then
    echo "IFS variable is unset (not declared)"
fi

Como alternativa, sem wc (graças a @Kusalananda, veja sua nota abaixo):

if set | ! grep -q ^IFS= ; then
    echo "IFS variable is unset (not declared)"
fi
    
por 07.10.2018 / 11:46

Tags