[
é outro nome para o utilitário test
. A única diferença entre eles é que [
espera um parâmetro ]
extra no final. A maioria dos sistemas tem uma página [
man com o mesmo conteúdo que a página test
man.
A maioria das shells possui [
e test
incorporadas, portanto, os recursos exatos descritos na página man podem diferir um pouco daqueles realmente disponíveis no shell. -z
é um recurso padrão disponível em todas as implementações. Procure a descrição do test
builtin ou a seção em expressões condicionais para encontrar operadores como -z
.
O comando [ -z $TEST_PARAM ]
deve, na verdade, ser [ -z "$TEST_PARAM" ]
, porque expansões variáveis fora de aspas duplas fazem muito mais do que expandir variáveis. Veja Por que meu script de shell engasgar com espaço em branco ou outros caracteres especiais? para mais detalhes. Sem aspas, o valor de TEST_PARAM
é dividido em palavras que são expandidas como padrões glob. Em contraste, "$TEST_PARAM"
expande para o valor da variável TEST_PARAM
. Se o valor de TEST_PARAM
estiver vazio, então $TEST_PARAM
será expandido em uma lista de palavras zero, portanto, o comando executado é [ -z ]
. Com apenas uma palavra para expressar a expressão condicional, a condicional é verdadeira se essa palavra não for vazia. Aqui -z
não é um operador, mas uma string não vazia.
Veja também usando um ou dois colchetes - bash