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
...
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?
(isso não é realmente uma resposta, mais um comentário)
Você precisa ter cuidado com os atalhos a && b || c
:
a
retornar sucesso, então b
será executado 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
Tags bash shell-script