Toto je další možnost
$ read test < <(echo hello world)
$ echo $test
hello world
pokud chcete načíst velké množství dat a pracovat na každém řádku zvlášť, můžete použít něco takového:
cat myFile | while read x ; do echo $x ; done
pokud chcete rozdělit řádky na více slov, můžete místo x použít více proměnných takto:
cat myFile | while read x y ; do echo $y $x ; done
případně:
while read x y ; do echo $y $x ; done < myFile
Ale jakmile začnete chtít udělat něco opravdu chytrého s tímto druhem věcí, měli byste si vybrat nějaký skriptovací jazyk, jako je perl, kde byste mohli zkusit něco takového:
perl -ane 'print "$F[0]\n"' < myFile
Perl (nebo tuším některý z těchto jazyků) je poměrně strmý, ale z dlouhodobého hlediska to bude mnohem snazší, pokud chcete dělat cokoliv jiného než ty nejjednodušší skripty. Doporučil bych Perl Cookbook a samozřejmě The Perl Programming Language od Larry Wall et al.
Použijte
IFS= read var << EOF
$(foo)
EOF
můžete trik read
do přijetí z potrubí, jako je tento:
echo "hello world" | { read test; echo test=$test; }
nebo dokonce napsat funkci jako je tato:
read_from_pipe() { read "[email protected]" <&0; }
Ale to nemá smysl – vaše variabilní přiřazení nemusí vydržet! Potrubí může vytvořit podskořápku, kde je prostředí zděděno hodnotou, nikoli odkazem. To je důvod, proč read
neobtěžuje se vstupem z potrubí – je nedefinovaný.
Pro informaci, http://www.etalabs.net/sh_tricks.html je šikovná sbírka věcí nezbytných k boji s podivnostmi a nekompatibilitou bourneských mušlí, shi.