Comment peut-on correctement parcourir les lignes de bash soit dans une variable, soit à partir du résultat d'une commande? Définir simplement la variable IFS sur une nouvelle ligne fonctionne pour la sortie d'une commande, mais pas pour le traitement d'une variable contenant de nouvelles lignes.
Par exemple
#!/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
Cela donne la sortie:
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
Comme vous pouvez le constater, l'écho de la variable ou une itération sur la cat
commande imprime correctement chacune des lignes. Cependant, la première boucle for imprime tous les éléments sur une seule ligne. Des idées?