Me quedé con un extraño comportamiento de readarray
mando.
Los man bash
estados:
readarray
Read lines from the standard input into the indexed array variable array
pero estos scripts no funcionan (la matriz está vacía):
unset arr; (echo a; echo b; echo c) | readarray arr; echo ${#arr[@]}
unset arr; cat /etc/passwd | readarray arr; echo ${#arr[@]}
Y estos funcionan:
unset arr; readarray arr < /etc/passwd ; echo ${#arr[@]}
unset arr; mkfifo /tmp/fifo; (echo a; echo b; echo c) > /tmp/fifo & mapfile arr < /tmp/fifo ; echo ${#arr[@]}
¿Qué hay de malo con la tubería?
< <
2 flechas?bash
página del manual. En resumen, es una sintaxis para tratar una tubería como un descriptor de archivo.< <(...)
significa redirigir la entrada (la primera<
) desde la salida del comando dentro<(...)
. De manera similar,> >(...)
pasaría la salida estándar a la entrada estándar de la tubería en el interior>(...)
. No necesariamente necesita usar la redirección con la sustitución del proceso.cat <( echo a b c )
funciona igual de bienreadarray
también puede leer desde stdin, entonces:fuente