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 № 1Dies 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