Lesen von Werten in eine Shell-Variable aus einer Pipe

Ich versuche, die Bash dazu zu bringen, Daten aus stdin zu verarbeiten, die über eine Pipeline eingespeist werden, aber ich habe kein Glück. Was ich meine ist keine der folgenden Arbeit:

echo "hello world" | test=($(< /dev/stdin)); echo test=$test
test=

echo "hello world" | read test; echo test=$test
test=

echo "hello world" | test=`cat`; echo test=$test
test=

wo ich die Ausgabe test=hello world haben möchte. Ich habe versucht "" Anführungszeichen um "$test" zu setzen, das funktioniert auch nicht.

read liest nicht aus einer Pipe (oder das Ergebnis geht verloren, weil die Pipe eine Subshell erzeugt). Sie können jedoch einen String hier in der Bash verwenden:


$ read a b c 
Kommentare (1)

Die Syntax für eine implizite Pipe von einem Shell-Befehl in eine Bash-Variable lautet

var=$(command)

oder

var=`command`

In Ihren Beispielen leiten Sie Daten an eine Zuweisungsanweisung weiter, die keine Eingabe erwartet.

Kommentare (4)

Das Einfügen von etwas in einen Ausdruck, der eine Zuweisung enthält, verhält sich nicht so.

Versuchen Sie es stattdessen:

test=$(echo "hello world"); echo test=$test
Kommentare (0)