Existem as seguintes maneiras de verificar se uma variável está disponível ou não em um script de shell Linux/Unix
[ ! -z "${MYVARIABLE}" ]
OU
[ -n "${MYVARIABLE}" ]
OU
[[ ! -v MYVARIABLE ]]
Qual é a diferença entre esses três? Quando um deve ser preferido ao outro? Além disso, se tentarmos combiná-los, um erro será dado. Por exemplo, se dermos o seguinte código, ele funcionará bem
if [ ! -z "${PROFILEHOME}" ] && [ -n "${PROFILEHOME}" ];
then
echo "Profile home variable that is being used is $PROFILEHOME"
else
echo "Profile home is not set"
fi
Entretanto, se tentarmos executar o seguinte
if [[ ! -v MYVARIABLE ]] && [ ! -z "${PROFILEHOME}" ] && [ -n "${PROFILEHOME}" ];
then
echo "Profile home variable that is being used is $PROFILEHOME"
else
echo "Profile home is not set"
fi
então o script de shell retorna uma mensagem de erro, " [: -v: operador inesperado "
A diferença entre os operadores -z e -n que é dada aqui simplesmente afirma que -z é para verificar quando a string é nula, enquanto -n é para verificar se não é nula.