Se o comportamento da condição vazia

4

Qual é a diferença entre:

if echo " T " | grep -q " F "; then echo FOUND; else echo NOT; fi

E:

if ""; then echo FOUND; else echo NOT; fi

A saída do primeiro comando é:

NOT

A saída do segundo comando é:

: command not found 
NOT

Ambos devem se comportar da mesma maneira, eu acho.

    
por user13107 04.12.2015 / 08:11

1 resposta

5
: command not found

Isso significa que o comando fornecido como condição na instrução if não foi encontrado. Esse comando "" é apenas uma string vazia e, portanto, não foi encontrado; não existe tal comando.

De acordo com a página de manual do bash, a sintaxe de uma instrução if deve ser a seguinte:

if list; then list; [ elif list; then list; ] ... [ else list; ] fi

A list is a sequence of one or more pipelines separated by one of the operators ;, &, &&, or ||, and optionally terminated by one of ;, &, or .

Assim, na instrução if acima da lista é executada e um código de saída de 127 retornou e um erro é visto que o comando não foi encontrado. Isso é então avaliado como falso, portanto, o bloco else é executado.

O que você pode querer é algo como segue:

if false; then echo FOUND; else echo NOT; fi
    
por 04.12.2015 / 08:23

Tags