Bash: Iterar sobre líneas en una variable
¿Cómo se itera adecuadamente sobre líneas en bash ya sea en una variable, o desde la salida de un comando? Simplemente estableciendo la variable IFS en una nueva línea funciona para la salida de un comando pero no cuando se procesa una variable que contiene nuevas líneas.
Por ejemplo
#!/bin/bash
list="One\ntwo\nthree\nfour"
#Print the list with echo
echo -e "echo: \n$list"
#Set the field separator to new line
IFS=$'\n'
#Try to iterate over each line
echo "For loop:"
for item in $list
do
echo "Item: $item"
done
#Output the variable to a file
echo -e $list > list.txt
#Try to iterate over each line from the cat command
echo "For loop over command output:"
for item in `cat list.txt`
do
echo "Item: $item"
done
Esto da la salida:
echo:
One
two
three
four
For loop:
Item: One\ntwo\nthree\nfour
For loop over command output:
Item: One
Item: two
Item: three
Item: four
Como puedes ver, haciendo eco de la variable o iterando sobre el comando cat
imprime cada una de las líneas una a una correctamente. Sin embargo, el primero para el bucle imprime todos los elementos en una sola línea. ¿Alguna idea?