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 $foo
zeigt 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 aus
str=expr
- Die übergeordnete Shell erhält das Ergebnis als Ausgabe.
- Die übergeordnete Shell speichert dieses Ergebnis in $var.