/ / Bash: Zuweisung der Ausgabe der Befehlsgruppe zu Variable - bash

Bash: Zuweisung der Ausgabe der Befehlsgruppe zu Variable - bash

Es ist zwar möglich, die Ausgabe eines Shell-Befehls einer Variablen wie folgt zuzuweisen:

list=$(ls -la)

Es scheint, dass ich die Ausgabe einer Befehlsgruppe nicht einer Variablen zuweisen kann. Das hier scheint nicht zu funktionieren:

output=${ echo "Peter"; echo "Pan"; }

Aber: Piping der Ausgabe einer Befehlsgruppe [1] ist möglich:

{
echo "To: $MAILTO"
echo "From: $FROM"
echo "Subject: $SUBJ"
echo
echo "Please check $HOSTNAME"
} | ssmtp $MAILTO

Warum kann ich die Ausgabe der Befehlsgruppe keiner Variablen zuweisen?


[1] Befehlsgruppe: { ... } | ...

Sehen: https://ss64.com/bash/syntax-brackets.html

Antworten:

2 für die Antwort № 1

Dies funktioniert nicht, weil Sie geschweifte Klammern verwenden:

$ output=${ echo "Peter"; echo "Pan"; }
bash: ${ echo "Peter"; echo "Pan"; }: bad substitution

In geschweiften Klammern, ${...}, bash erwartet den Namen einer Variablen.

Um die Ausgabe eines Befehls zu erfassen, verwenden Sie parens:

$ output=$( echo "Peter"; echo "Pan"; )
$ echo "$output"
Peter
Pan