o que o sinalizador -z significa aqui

5

O que significa o sinal -z no código abaixo:

if [ -z $TEST_PARAM ]; then

E há uma lista dessas bandeiras?

Para uma bandeira como ls -l , eu sei onde encontrá-la, mas para uma única bandeira, não encontrei nenhum site que a descreva.

    
por Zhenxiao Hao 08.07.2014 / 11:06

3 respostas

5

-z STRING significa :

the length of STRING is zero

Você pode ver uma lista de todos eles com man test .

[ é um alias para o comando test , embora geralmente implementado pelo seu shell na prática. Você provavelmente tem um /bin/[ , no entanto. Todos esses -X testes são opções para test .

    
por 08.07.2014 / 11:08
1

[ é 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

    
por 09.07.2014 / 02:51
0

Isso significa que "se o parâmetro não existir, faça o seguinte".

Você pode ver isso com:

$ ABC='1'                                                                                     
$ 
$ if [ -z $ABC ]; then echo "ABC"; # Nothing
fi;                                                          
$
$ if [ -z $XYZ ]; then echo "yes"; # echo "Yes"
fi;                                                         
yes
$

Um exemplo de onde eu uso isso, está no meu arquivo .bashrc para invocar tmux , mas não recursivamente, como em:

[ -z $TMUX ] && export TERM=xterm-256color && exec tmux
    
por 09.07.2014 / 03:36