Observe que isso [] && cmd
não é o mesmo que if .. fi
construção.
Às vezes, seu comportamento é bastante semelhante e você pode usar em [] && cmd
vez de if .. fi
. Mas apenas algumas vezes. Se você tiver mais de um comando para executar se condição ou precisar de if .. else .. fi
cuidado e qual a lógica.
Alguns exemplos:
[ -z "$VAR" ] && ls file || echo wiiii
Não é o mesmo que
if [ -z $VAR ] ; then
ls file
else
echo wiii
fi
porque se ls
falhar, echo
será executado o que não acontecerá com if
.
Outro exemplo:
[ -z "$VAR" ] && ls file && echo wiii
não é o mesmo que
if [ -z "$VAR" ] ; then
ls file
echo $wiii
fi
embora essa construção atue da mesma maneira
[ -z "$VAR" ] && { ls file ; echo wiii ; }
observe que o ;
eco é importante e deve estar lá.
Então, retomando a declaração acima, podemos dizer
[] && cmd
== se o primeiro comando for bem sucedido, execute o próximo
if .. fi
== se condição (que também pode ser o comando de teste), execute o (s) comando (s)
Portanto, apenas para portabilidade [
e [[
uso [
.
if
é compatível com POSIX. Então, se você tiver que escolher entre [
e if
escolher a olhar para a sua tarefa e comportamento esperado.
[ … ]
vs[[ … ]]
vstest …
, há respostas mais completas nesta pergunta quase duplicada .