Como eu uso uma função return como uma condição de um if then then shortcut?

2

Existem casos em que uma função precisa ser executada e retornar ao chamador e isso funciona para mim.

if tst; then
    echo "success"
else
    echo "failure"
fi

function tst () {
    return 0;
}

No entanto, parece que não consigo fazer isso usando a sintaxe de atalho. Eu tentei muitas combinações da declaração a seguir, incluindo testar se [[tst = true]] ou se é="0", mas não consegui descobrir.

[[ tst ]] && echo "success" || echo "failure"

Qual é a maneira correta de testar a função na condição if usando a sintaxe de atalho bash?

    
por dimmech 29.01.2015 / 17:33

2 respostas

7

Supondo que você queira usar A && B || C , simplesmente chame a função diretamente:

tst && echo "success" || echo "failure"

Se você quiser usar [[ , precisará usar o valor de saída:

tst
if [[ $? -eq 0 ]]
then 
    ...
    
por 29.01.2015 / 17:38
4

(isso não é realmente uma resposta, mais um comentário)

Você precisa ter cuidado com os atalhos a && b || c :

  • se a retornar sucesso, então b será executado
  • se b subsequentemente retornar um status de saída, então c será executado também.
$ [[ -f /etc/passwd ]] && { echo "file exists"; false; } || echo "file does not exist"
file exists
file does not exist

if a; then b; else c; fi é mais seguro a esse respeito, em que c não depende de b , somente a

$ if [[ -f /etc/passwd ]];then { echo "file exists"; false; }; else echo "file does not exist"; fi
file exists
$ echo $?
1
    
por 29.01.2015 / 17:56