Dies ist eine weitere Option
$ read test < <(echo hello world)
$ echo $test
hello world
Wenn Sie viele Daten einlesen und jede Zeile separat bearbeiten möchten, können Sie Folgendes verwenden:
cat myFile | while read x ; do echo $x ; done
Wenn Sie die Zeilen in mehrere Wörter aufteilen möchten, können Sie anstelle von x mehrere Variablen wie folgt verwenden:
cat myFile | while read x y ; do echo $y $x ; done
alternativ:
while read x y ; do echo $y $x ; done < myFile
Aber sobald Sie anfangen wollen, irgendetwas wirklich Kluges mit dieser Art von Dingen zu tun, sollten Sie sich besser für eine Skriptsprache wie Perl entscheiden, wo Sie so etwas ausprobieren könnten:
perl -ane 'print "$F[0]\n"' < myFile
Es gibt eine ziemlich steile Lernkurve mit Perl (oder ich schätze jede dieser Sprachen), aber Sie werden es auf lange Sicht viel einfacher finden, wenn Sie etwas anderes als die einfachsten Skripte machen wollen. Ich empfehle das Perl Cookbook und natürlich The Perl Programming Language von Larry Wall et al.
Verwenden Sie
IFS= read var << EOF
$(foo)
EOF
Sie können Trick read
in das Akzeptieren von einer Pipe wie dieser:
echo "hello world" | { read test; echo test=$test; }
oder schreiben Sie sogar eine Funktion wie diese:
read_from_pipe() { read "[email protected]" <&0; }
Aber es hat keinen Sinn - Ihre Variablenzuweisungen dauern möglicherweise nicht! Eine Pipeline kann eine Subshell hervorbringen, in der die Umgebung nach Wert geerbt wird, nicht nach Referenz. Deshalb read
kümmert sich nicht um Eingaben aus einer Pipe - sie ist undefiniert.
FYI, http://www.etalabs.net/sh_tricks.html ist eine raffinierte Sammlung der Cruft, die notwendig ist, um die Kuriositäten und Inkompatibilitäten von Bourne-Muscheln zu bekämpfen, sh.