Was bedeutet „var=${str=expr}“ in der Linux-Shell?

Was bedeutet „var=${str=expr}“ in der Linux-Shell?

Was bedeutet „var=${str=expr}“ in der Linux-Shell? Wer kann es mir genauer erklären?

Antwort1

Siehe „Parametererweiterung“ in man bash:

${parameter:=word} Standardwerte zuweisen. Wenn der Parameter nicht gesetzt oder null ist, wird dem Parameter die Worterweiterung zugewiesen. Der Wert des Parameters wird dann ersetzt. Positionsparameter und Sonderparameter dürfen auf diese Weise nicht zugewiesen werden.

Der Doppelpunkt wird oben erklärt:

Wenn keine Teilzeichenfolgenerweiterung durchgeführt wird, prüft Bash mithilfe der unten dokumentierten Formulare, ob ein Parameter nicht gesetzt oder null ist. Wenn der Doppelpunkt weggelassen wird, wird nur auf einen Parameter geprüft, der nicht gesetzt ist.

Beweis:

var=${str=expr}
echo $var
echo $str

Ausgabe:

expr
expr

Antwort2

In Bash können Sie $( ) verwenden, um eine Aufgabe in einer Subshell zu starten.

Beispiel:

#!/usr/bin/env bash
foo=${ls}
echo $foo

Dieses Skript füllt die Variable $foo mit dem Ergebnis von ls.
(und echo $foozeigt Ihnen den Inhalt).


Nun zu Ihrer spezifischeren Frage. Ich kannte das Ergebnis auch nicht, also habe ich es getestet und angenommen, dass Sie mit „Linux-Shell“ Bash meinen, die Standard-Shell auf meinen Linux-Distributionen.

Ich habe die folgende Datei erstellt:

#!/usr/bin/env bash
foo=${str="test 1 2 3"}
echo $foo

und führte es aus:

> ./test t
test 1 2 3

Es scheint, als würde der Wert in der Zeichenfolge (oder in Ihrem Ausdruck) der Variablen zugewiesenUndum diesen Wert an das übergeordnete Skript zurückzugeben.


Um es noch einmal zusammenzufassen:

  • Eine neue Shell wird gestartet
  • Diese neue Shell führt den Befehl ausstr=expr
  • Die übergeordnete Shell erhält das Ergebnis als Ausgabe.
  • Die übergeordnete Shell speichert dieses Ergebnis in $var.

verwandte Informationen