GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Liest Werte aus einer Pipe in eine Shell-Variable ein

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.


Linux
  1. Schleife ignoriert Variablenänderung aus einer Subshell im Hintergrund?

  2. Wie füge ich CSV-Daten über eine Shell-Pipe in eine Sqlite-Tabelle ein?

  3. Wie liest man eine Variable aus einer Datei?

  4. Datei in Array einlesen?

  5. Wie bekomme ich den Namen des aktuellen Git-Zweigs in eine Variable in einem Shell-Skript?

Was ist Subshell in Linux?

Wie Echo in Datei

Alle Zeilenumbrüche werden entfernt, wenn die cat-Ausgabe in einer Variablen gespeichert wird

Iterieren Sie mithilfe des Shell-Skripts über die $PATH-Variable

Klarstellung bezüglich des Verhaltens von Shell-Skript zusammen mit Pipe

bash + liest Variablen und Werte aus der Datei per Bash-Skript