Teste se uma variável não está definida

7

Existe um teste portátil para determinar se uma variável (cujo nome é conhecido estaticamente em um script) está indefinida (o que é diferente de vazia)?

    
por PSkocik 30.08.2018 / 12:18

2 respostas

13

Para variáveis escalares, na sintaxe padrão (POSIX) sh :

if [ "${var+set}" != set ]; then
  echo var is not set
fi

Ou mais extravagante, embora menos legíveis, como

if [ -z "${var++}" ]; then
  echo var is unset
fi

Ou:

if ${var+false}; then
  echo var is unset
fi

Para variáveis de matriz (não que as matrizes sejam portáteis ), em zsh ou yash , que retornariam não definidas, a menos que a matriz recebesse uma lista incluindo a lista vazia, enquanto em bash ou ksh que retornaria unset a menos que o elemento do índice 0 estivesse definido. O mesmo para matrizes associativas (para a chave "0").

Observe que, exceto em zsh (quando não em sh emulation), export var ou readonly var declara a variável, mas não fornece nenhum valor, portanto, shells que não sejam zsh reportará var como unset lá (a menos que var tenha recebido um valor antes da chamada para export / readonly ).

    
por 30.08.2018 / 12:20
0

POSIX define várias expansões de parâmetros para testar se um parâmetro não está definido.

A seguinte expansão de parâmetro pode ser usada para testar se um parâmetro não está definido. A segunda parte (após o ponto de interrogação) pode ser especificada para indicar que o parâmetro var não está definido.

echo ${var?parameter not set}
-sh: var: parameter not set

Note que pode ser um erro de programação usar um parâmetro indefinido.

prompt% sh -u script   # or set -o nounset
por 31.08.2018 / 16:33

Tags