$ {parameter: = word} Standardwerte zuweisen. Wenn der Parameter nicht gesetzt oder null ist, wird die Erweiterung des Wortes dem Parameter zugewiesen. Der Wert des Parameters wird dann ersetzt. Positionsparameter und spezielle Parameter dürfen auf diese Weise nicht zugeordnet werden.
Ich dachte, ich könnte diese Funktion verwenden, um ${LONG_VARIABLE_NAME:=hello}
anstelle der längeren zu schreiben LONG_VARIABLE_NAME=${LONG_VARIABLE_NAME:-hello}
, aber jetzt versucht bash auch, 'Hallo' auszuführen, und das gibt einen Befehl, der nicht gefunden wurde. Wie kann man das vermeiden? Oder muss ich mich an Letzteres halten? Kann jemand ein Beispiel geben, in dem die Zuweisung von Standard tatsächlich nützlich ist?
Antworten:
Verwenden Sie einen Doppelpunkt:
Der Doppelpunkt ist ein Nullbefehl, der nichts tut und seine Argumente ignoriert. Es ist in bash integriert, sodass kein neuer Prozess erstellt wird.
quelle
: ${A:=hello}
das genau so lange dauertA=${A:-hello}
. Es scheint auch, dass letzteres etwas weniger esoterisch ist und seine Absicht klarer ist. Die Verwendung:
, die im Grunde genommen ein No-Op ist, erscheint im Vergleich zu der Art und Weise, wie das OP es zuvor getan hat, klobig.:
hätten, um sie auf Standardwerte zu initialisieren, und sie lange Namen haben, der Ansatz sowohl zum Tippen als auch zum Lesen vorzuziehen wäre. Ja, dies scheint ein Bereich zu sein, in dem Bash eine kleine Verbesserung gebrauchen könnte.: ${VERY_LONG_VARIABLE_NAME:=hello}
vs.:VERY_LONG_VARIABLE_NAME=${VERY_LONG_VARIABLE_NAME:-hello}
. Ich hoffe, Sie verwenden beschreibende Variablennamen in Ihrem Code :)VERY_LONG_VARIABLE_NAME=${VERY_LOGN_VARIABLE_NAME:-hello}
. Hoppla.A=$A:-hello
Ansatzes besteht darin, dass er sich beim Ausführen selbst dokumentiertset -x
. Das heißt, die Zuweisung wird so gedruckt, alsA=hello
würde der Befehl null nur den Wert (hello
) drucken .Bitte schauen Sie auf http://www.tldp.org/LDP/abs/html/parameter-substitution.html für Beispiele
Wenn der Parameter nicht festgelegt ist, verwenden Sie die Standardeinstellung. Nach dem Aufruf ist der Parameter immer noch nicht eingestellt.
Beide Formen sind fast gleichwertig. Das Extra
:
macht nur dann einen Unterschied, wenn der Parameter deklariert wurde, aber null ist.Wenn der Parameter nicht festgelegt ist, setzen Sie den Parameterwert auf den Standardwert.
Beide Formen sind nahezu gleichwertig. Das: macht nur dann einen Unterschied, wenn der Parameter deklariert wurde und null ist
Wenn ein Parametersatz vorhanden ist, verwenden Sie alt_value, andernfalls verwenden Sie eine Nullzeichenfolge. Nach dem Aufruf wird der Parameterwert nicht geändert.
Beide Formen sind nahezu gleichwertig. Das: macht nur dann einen Unterschied, wenn der Parameter deklariert wurde und null ist
quelle
Die Standardwertparametererweiterung ist häufig in Build-Skripten wie dem folgenden Beispiel hilfreich. Wenn der Benutzer das Skript nur so aufruft, wie es ist, wird Perl nicht integriert. Der Benutzer muss explizit
WITH_PERL
einen anderen Wert als "no" festlegen , damit es integriert wird.Bauen ohne Perl
Bauen Sie mit Perl
quelle