O que significa "se!"

7

Eu me deparei com uma declaração if / then assim:

if ! foo ; then
        echo "blah" 
        exit 1
fi

O que significa especificamente if ! ? "Se o resultado de foo não for verdade?" "Se o código de saída de foo não for 0"?

    
por Mike B 18.10.2014 / 04:29

3 respostas

16

! inverte o significado do status de saída do comando - ele faz parte da sintaxe do shell POSIX, não é parte de if . Da especificação POSIX :

If the reserved word ! does not precede the pipeline, the exit status shall be the exit status of the last command specified in the pipeline. Otherwise, the exit status shall be the logical NOT of the exit status of the last command. That is, if the last command returns zero, the exit status shall be 1; if the last command returns greater than zero, the exit status shall be zero.

    
por 18.10.2014 / 04:34
11

É um operador booleano que equivale à lógica não .

Veja man bash :

! expression
    True if expression is false.

No seu exemplo, se não for foo , echo blah .

    
por 18.10.2014 / 04:37
6

Só para adicionar às outras respostas, o código usa ! para evitar escrever o código da seguinte forma:

if foo ; then
    # everything that used to follow "fi" in the previous version
else
    echo "blah" 
    exit 1
fi

Isso só funciona se houver algo após o fi no script, pois uma cláusula if vazia não é legal. (Um comentário não conta.)

Escrever dessa maneira custa um nível de recuo, que a programação estruturada programação estruturada dirá a você é um custo vale a pena pagar. Esta escola de desenvolvimento de software diz que um exit no meio de um programa dificilmente é melhor que goto end , e como goto é um mal não mitigado, o nível extra de aninhamento é uma melhoria.

Uma escola concorrente diz: "É, os recuos são ótimos até que você tenha empurrado todo o código do lado direito da tela".

Então você pega aqueles que acham que ambos os campos são um pouco malucos, e simplesmente observa que é melhor evitar lógica negativa quando possível, e que o caso normal deve ser o primeiro, com exceções ao final do programa.

Escolha seu kool-aid e beba.

    
por 18.10.2014 / 06:17

Tags