variable one loop for array bash foreach

one - Bash foreach loop



for loop shell bash (6)

"foreach" no es el nombre para bash. Es simplemente "para". Puedes hacer cosas en una línea solo como:

for fn in `cat filenames.txt`; do cat "$fn"; done

Referencia: http://www.cyberciti.biz/faq/linux-unix-bash-for-loop-one-line-command/

Tengo una entrada (digamos un archivo). En cada línea hay un nombre de archivo. ¿Cómo puedo leer este archivo y mostrar el contenido de cada uno?


Algo como esto haría:

xargs cat <filenames.txt

El programa xargs lee su entrada estándar, y para cada línea de entrada ejecuta el programa cat con las líneas de entrada como argumento (s).

Si realmente quieres hacer esto en un bucle, puedes:

for fn in `cat filenames.txt`; do echo "the next file is $fn" cat $fn done


Aquí hay un ciclo while:

while read filename do echo "Printing: $filename" cat "$filename" done < filenames.txt


Es probable que desee manejar espacios en los nombres de sus archivos, aunque aborrecibles son :-)

Entonces, optaría inicialmente por algo como:

pax> cat qq.in normalfile.txt file with spaces.doc pax> sed ''s/ /// /g'' qq.in | xargs -n 1 cat <<contents of ''normalfile.txt''>> <<contents of ''file with spaces.doc''>> pax> _


cat `cat filenames.txt`

hará el truco


xargs --arg-file inputfile cat

Esto generará el nombre del archivo seguido del contenido del archivo:

xargs --arg-file inputfile -I % sh -c "echo %; cat %"