Ho hackerato molti script di shell e talvolta le cose più semplici mi sconcertano. Oggi mi sono imbattuto in una sceneggiatura che ha fatto ampio uso del :
builtin bash (due punti).
La documenazione sembra abbastanza semplice:
: (a colon) : [arguments]
Non fare altro che espandere gli argomenti ed eseguire reindirizzamenti. Lo stato di ritorno è zero.
Tuttavia, in precedenza l'ho visto solo usato nelle dimostrazioni di espansione della shell. Il caso d'uso nello script che ho incontrato ha fatto ampio uso di questa struttura:
if [ -f ${file} ]; then
grep some_string ${file} >> otherfile || :
grep other_string ${file} >> otherfile || :
fi
In realtà c'erano centinaia di greps, ma sono più o meno le stesse. Non sono presenti reindirizzamenti di input / output diversi dalla semplice struttura sopra. Nessun valore restituito viene verificato successivamente nello script.
Sto leggendo questo come un costrutto inutile che dice "o non fare nulla". A quale scopo potrebbe finire questa greps con "o non fare nulla"? In che caso questo costrutto causerebbe un risultato diverso rispetto alla semplice esclusione || :
da tutte le istanze?
:
come alternativa atrue
. Forseerrexit
è impostato e all'autore non interessa lo stato di uscita di alcuni comandi.