GNU/Linux >> Tutoriales Linux >  >> Linux

Leer valores en una variable de shell desde una tubería

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.


Linux
  1. Canalice la cadena a la fecha GNU para la conversión:¿cómo hacer que se lea desde la entrada estándar?

  2. Todas las líneas nuevas se eliminan al guardar la salida cat en una variable

  3. Alcance variable para scripts y funciones bash shell en el script

  4. ¿Cómo conservar los saltos de línea al almacenar la salida del comando en una variable?

  5. Iterar sobre la variable $ PATH usando el script de shell

¿Qué es Subshell en Linux?

Cómo hacer eco en un archivo

Linux bash:Asignación de múltiples variables

¿Cómo obtener el nombre de la rama git actual en una variable en un script de Shell?

Enviar un correo desde un script de shell de Linux

Shell:escribe contenido variable en un archivo