Eu hackeei muitos scripts shell e, às vezes, as coisas mais simples me confundem. Hoje, deparei-me com um script que fazia uso extensivo do :
bash (dois pontos) incorporado.
A documenação parece bastante simples:
: (a colon) : [arguments]
Não faça nada além de expandir argumentos e executar redirecionamentos. O status de retorno é zero.
No entanto, eu já vi isso apenas em demonstrações de expansão de shell. O caso de uso no script que eu deparei fez uso extensivo dessa estrutura:
if [ -f ${file} ]; then
grep some_string ${file} >> otherfile || :
grep other_string ${file} >> otherfile || :
fi
Na verdade, havia centenas de greps, mas são apenas mais do mesmo. Nenhum redirecionamento de entrada / saída está presente além da estrutura simples acima. Nenhum valor de retorno é verificado posteriormente no script.
Estou lendo isso como uma construção inútil que diz "ou não faça nada". Qual o propósito de terminar com esses "cumprimentos" ou "não fazer nada"? Em que caso essa construção causaria um resultado diferente do que simplesmente deixar de fora || :
todas as instâncias?
:
como alternativatrue
. Talvezerrexit
esteja definido e o autor não se importe com o status de saída de alguns comandos.