483 Stimmen

Was ist der Zweck des : (Doppelpunkt) GNU Bash builtin?

Was ist der Zweck eines Befehls, der nichts tut und kaum mehr als ein Vorspann für einen Kommentar ist, der aber selbst ein Shell-Builtin ist?

Es ist um etwa 40% pro Aufruf langsamer als das Einfügen eines Kommentars in Ihre Skripte, was wahrscheinlich stark von der Größe des Kommentars abhängt. Die einzigen möglichen Gründe, die ich dafür sehen kann, sind die folgenden:

# poor man's delay function
for ((x=0;x<100000;++x)) ; do : ; done

# inserting comments into string of commands
command ; command ; : we need a comment in here for some reason ; command

# an alias for `true'
while : ; do command ; done

Ich schätze, was ich wirklich suche, ist, welche historische Anwendung es gehabt haben könnte.

5voto

Ich habe diese Verwendung in einem Skript gesehen und dachte, es sei ein guter Ersatz für den Aufruf von basename innerhalb eines Skripts.

oldIFS=$IFS  
IFS=/  
for basetool in $0 ; do : ; done  
IFS=$oldIFS  

... dies ist ein Ersatz für den Code: basetool=$(basename $0)

4voto

kvantour Punkte 22682

Eine andere, hier noch nicht erwähnte Möglichkeit ist die Initialisierung von Parametern in unendlichen while-Schleifen. Das folgende Beispiel ist nicht das sauberste, aber es erfüllt seinen Zweck.

#!/usr/bin/env bash
[ "$1" ] && foo=0 && bar="baz"
while : "${foo=2}" "${bar:=qux}"; do
    echo "$foo"
    (( foo == 3 )) && echo "$bar" && break
    (( foo=foo+1 ))
done

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X