GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Welchem ​​Zweck dient der eingebaute Doppelpunkt „:“?

Ich habe viele Shell-Skripte gehackt, und manchmal verblüffen mich die einfachsten Dinge. Heute bin ich auf ein Skript gestoßen, das ausgiebig Gebrauch von : gemacht hat (Doppelpunkt) bash eingebaut.

Die Dokumentation scheint einfach genug:

: (a colon)  
     : [arguments]  

Tun Sie nichts, außer Argumente zu erweitern und Umleitungen durchzuführen. Der Rückgabestatus ist Null.

Ich habe dies jedoch bisher nur in Demonstrationen der Shell-Erweiterung verwendet gesehen. Der Anwendungsfall in dem Skript, auf das ich stieß, machte ausgiebigen Gebrauch von dieser Struktur:

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 einfach mehr vom Gleichen. Abgesehen von der obigen einfachen Struktur sind keine Eingabe-/Ausgabeumleitungen 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 „or do nothing“ zu beenden? In welchem ​​Fall würde dieses Konstrukt zu einem anderen Ergebnis führen, als einfach den || : aus allen Instanzen?

Akzeptierte Antwort:

Es erscheint der : s in Ihrem Skript werden anstelle von true verwendet . Wenn grep keine Übereinstimmung in der Datei findet, wird ein Exit-Code ungleich Null zurückgegeben; wie jw013 in einem Kommentar erwähnt, wenn errexit gesetzt wird, wahrscheinlich durch -e In der Shebang-Zeile würde das Skript beendet, wenn einer der grep s keine Übereinstimmung finden. Das war eindeutig nicht das, was der Autor wollte, also fügte er || : um den Exit-Status dieses bestimmten zusammengesetzten Befehls immer auf Null zu setzen, wie das (meiner Erfahrung nach) häufigere || true /|| /bin/true .


Linux
  1. Der Sinn von Uniq -u und was macht es?

  2. Was macht Rackspace in der Cloud?

  3. Was ist der Zweck des Benutzers „mysql.sys@localhost“.

  4. Was ist der Zweck der Gruppe „Wheel“ in Linux?

  5. Was ist der Zweck der .bashrc-Datei in Linux

Was bedeutet kaufmännisches Und am Ende einer Shell-Skriptzeile?

Was bedeutet in der Ausgabe von Ps?

Was bedeutet set -e in einem Bash-Skript?

Was bedeutet das 'rc' in `.bashrc` usw.?

Was macht dieses sh-Skript, wenn es ausgeführt wird?

Was bedeutet 1 am Ende des awk-Skripts?