Wozu dient der Operator "null" in einem BASH-Skript? Ich verstehe, dass es als Platzhalter nach einem if
Befehl verwendet wird, wenn Sie nichts zu sagen haben, aber einen Befehl benötigen, damit das Programm ordnungsgemäß ausgeführt werden kann. Aber wozu dient es insgesamt? Wann würdest du es benutzen? Wann ist es sinnvoll, es zu benutzen?
13
Antworten:
Es ist manchmal nützlich, Nebeneffekte von Parametererweiterungen zuzulassen.
Beispiel: Festlegen eines Standardwerts
quelle
:
Befehls- und Parametererweiterung finden Sie im bash-Handbuch.${name:="John Doe"}
wird erweitert, wodurch die Zuweisung stattfindet, da sie als Argument für Folgendes gelesen wird:. Ohne das: versucht die Shell, "John Doe" als Befehl auszuführen, oder den Wert,$name
wenn er bereits festgelegt istSie können es auch für Endlosschleifen verwenden:
quelle
while true
ist es besser lesbar, weil (a) weniger Interpunktion verwendet wird und (b) C-abgeleiteten Sprachen ähnlicher ist.Sie können damit eine Datei erstellen, ohne ein Programm auszuführen:
Dies ist unendlich viel schneller als
touch /path/to/file
(da dastouch
Programm nicht ausgeführt werden muss) und möglicherweise etwas portabler als nur normalDas scheint auf vielen Systemen zu funktionieren. Auf ähnliche Weise kann überprüft werden, ob Sie Schreibzugriff auf eine Datei haben :
Dies kann jedoch auch im Allgemeinen ohne das getan werden
:
. Vorsichtsmaßnahmen:(Siehe die verknüpfte Frage aus Gründen, warum dies zuverlässiger ist als
if [ -w /path/to/file ]
.)quelle
In früheren Versionen von Unix V6 und Thompson Shell wurde das
:
tatsächlich als Teil dergoto
Anweisung verwendet. Laut Handbuch erschien es ursprünglich in Version 3 von Unix:Heutzutage wird
bash
es als No-Op-Operator verwendet und kehrt zum Erfolg zurück. In der Tat, wenn Sie sich den Quellcode ansehen , werden Sie sehen, dass beidetrue
und:
dieselbe Funktionint colon_builtin()
, darunter, verwenden. Es gibt keinen:
nicht eingebauten Befehl und er/bin/true
ist eigentlich ein ziemlich großer Befehl für das, was er tut.:
könnte überalltrue
verwendet werden, zum Beispiel incommand_that_can_fail || true
, obwohl dies Nicht-Experten verwirren dürfte. Lesen Sie hier mehr darüber .quelle
Sie können es für den positiven Test eines
if
Befehls verwenden, wenn Sie nur etwas auf der negativen Seite tun möchten. Beispielsweise:Ohne die
:
Bash würde ein Syntaxfehler generiert.Dies ist ein stark vereinfachtes Beispiel. Im Allgemeinen würden Sie eine solche Technik beim vorläufigen Codieren verwenden, wenn Sie dieses Codesegment noch nicht geschrieben haben und nur etwas benötigen, das keinen Fehler erzeugt.
quelle
if pgrep firefox >/dev/null ; then : ; else echo "Firefox not running"; fi
würde dies nur dann einen Fehler anzeigen, wenn Firefox nicht ausgeführt wird. Mit anderen Worten, wenn Sie etwas nur dann tun müssen, wenn der Befehl einen Fehler aufweist. Inpgrep firefox || echo "Firefox not running"
Ich habe es nur in einem Skript mit SSH-Befehlen verwendet, um Fehler im Skript zu vermeiden.
In diesem Fall möchte ich sehen, ob ein Benutzer eine Verbindung zu einer Reihe von Servern herstellen kann. Wenn die Verbindung in Ordnung ist, gibt der Remote-Host das Echo OK aus. Wenn die Verbindung fehlschlägt, antwortet SSH mit dem Fehler. Ich möchte jedoch, dass mein Skript mit 0 beendet wird und nicht mit dem Wert des SSH-Befehls, wenn dies fehlschlägt. Im Grunde genommen fange ich den SSH-Fehler ein, indem ich ihn
||
mit dem Null-Befehl ODER-verknüpft:
. Sieht aus wie das:Auf diese Weise erhalte ich die Ausgabe von SSH, aber nicht den Fehlercode:
quelle