Ich habe viele Shell-Skripte gehackt, und manchmal verwirren mich die einfachsten Dinge. Heute bin ich auf ein Skript :
gestoßen, das das (Doppelpunkt-) Bash-Builtin ausgiebig genutzt hat.
Die Dokumentation scheint einfach zu sein:
: (a colon) : [arguments]
Führen Sie nichts weiter aus, als Argumente zu erweitern und Umleitungen durchzuführen. Der Rückgabestatus ist Null.
Bisher habe ich dies jedoch nur bei Demonstrationen der Shell-Expansion gesehen. Der Anwendungsfall in dem Skript, auf das ich gestoßen bin, hat diese Struktur ausgiebig genutzt:
if [ -f ${file} ]; then
grep some_string ${file} >> otherfile || :
grep other_string ${file} >> otherfile || :
fi
Es gab tatsächlich Hunderte von Greps, aber sie sind nur mehr gleich. Außer der oben beschriebenen einfachen Struktur sind keine Eingabe- / Ausgabe-Umleitungen vorhanden. Später im Skript werden keine Rückgabewerte überprüft.
Ich lese dies als ein nutzloses Konstrukt, das sagt "oder nichts tun". Welchem Zweck könnte es dienen, diese Greps mit "oder nichts tun" zu beenden? In welchem Fall würde dieses Konstrukt ein anderes Ergebnis hervorrufen, als einfach das || :
von allen Instanzen wegzulassen?
:
als Alternative zutrue
. Vielleichterrexit
ist gesetzt und der Autor kümmert sich nicht um den Exit-Status einiger Befehle.