Para leer un archivo en BASH linea por linea se podría implementar realizando :
1 2 3 4 |
#!/bin/bash while read linea; do echo -e "Línea: $linea" done < archivo |
Fíjate que en la última línea, el fichero (hay que poner su path completo) se utiliza como entrada para el comando while. Pero con esta versión sencilla podemos encontrarnos con varios problemas. Una versión más segura es:
1 2 3 4 |
#!/bin/bash while IFS='' read -r linea || [[ -n "$linea" ]]; do echo -e "Línea: $linea" done < archivo |
IFS es una variable interna de bash que establece el separador de palabras. Al dejarlo vacío evitamos que se eliminen los espacios que hubiera al principio de la línea. El parámetro -r en el comando read hace que no se interpreten los caracteres escapados (con \). Y la condición || [[ -n $line ]] evita que se produzca un error si la última línea no termina con \n. Como conviene no alterar IFS, podemos mejorar la solución con :
1 2 3 4 5 6 |
#!/bin/bash backIFS=$IFS while IFS='' read -r linea || [[ -n "$linea" ]]; do echo -e "Línea: $linea" done < archivo IFS=$backIFS |