Questa è un'altra opzione
$ read test < <(echo hello world)
$ echo $test
hello world
se vuoi leggere molti dati e lavorare su ciascuna riga separatamente, puoi usare qualcosa del genere:
cat myFile | while read x ; do echo $x ; done
se vuoi dividere le righe in più parole puoi usare più variabili al posto di x in questo modo:
cat myFile | while read x y ; do echo $y $x ; done
in alternativa:
while read x y ; do echo $y $x ; done < myFile
Ma non appena inizi a voler fare qualcosa di veramente intelligente con questo genere di cose, è meglio che tu scelga un linguaggio di scripting come perl dove potresti provare qualcosa del genere:
perl -ane 'print "$F[0]\n"' < myFile
C'è una curva di apprendimento piuttosto ripida con perl (o immagino uno qualsiasi di questi linguaggi) ma lo troverai molto più facile a lungo termine se vuoi fare qualcosa di diverso dal più semplice degli script. Consiglierei Perl Cookbook e, ovviamente, The Perl Programming Language di Larry Wall et al.
Usa
IFS= read var << EOF
$(foo)
EOF
Puoi trucco read
in accettazione da una pipe come questa:
echo "hello world" | { read test; echo test=$test; }
o anche scrivere una funzione come questa:
read_from_pipe() { read "[email protected]" <&0; }
Ma non ha senso:i tuoi incarichi variabili potrebbero non durare! Una pipeline può generare una subshell, in cui l'ambiente viene ereditato per valore, non per riferimento. Ecco perché read
non si preoccupa dell'input da una pipe:non è definito.
Cordiali saluti, http://www.etalabs.net/sh_tricks.html è un'elegante raccolta del cruft necessario per combattere le stranezze e le incompatibilità delle bourne shell, sh.