Esta es otra opción
$ read test < <(echo hello world)
$ echo $test
hello world
si desea leer muchos datos y trabajar en cada línea por separado, podría usar algo como esto:
cat myFile | while read x ; do echo $x ; done
si desea dividir las líneas en varias palabras, puede usar varias variables en lugar de x como esta:
cat myFile | while read x y ; do echo $y $x ; done
alternativamente:
while read x y ; do echo $y $x ; done < myFile
Pero tan pronto como empieces a querer hacer algo realmente inteligente con este tipo de cosas, será mejor que busques un lenguaje de programación como Perl, donde podrías probar algo como esto:
perl -ane 'print "$F[0]\n"' < myFile
Hay una curva de aprendizaje bastante empinada con perl (o supongo que con cualquiera de estos lenguajes), pero a la larga le resultará mucho más fácil si quiere hacer algo que no sea el más simple de los scripts. Recomendaría el Libro de recetas de Perl y, por supuesto, El lenguaje de programación de Perl de Larry Wall et al.
Usar
IFS= read var << EOF
$(foo)
EOF
Tu puedes truco read
en aceptar de una canalización como esta:
echo "hello world" | { read test; echo test=$test; }
o incluso escribir una función como esta:
read_from_pipe() { read "[email protected]" <&0; }
Pero no tiene sentido:¡sus asignaciones de variables pueden no durar! Una canalización puede generar una subcapa, donde el entorno se hereda por valor, no por referencia. Por eso read
no se molesta con la entrada de una tubería, no está definida.
FYI, http://www.etalabs.net/sh_tricks.html es una colección ingeniosa de la cruft necesaria para luchar contra las rarezas e incompatibilidades de los proyectiles bourne, sh.