Come si fa a scorrere correttamente su righe in bash in una variabile o dall'output di un comando? La semplice impostazione della variabile IFS su una nuova riga funziona per l'output di un comando ma non durante l'elaborazione di una variabile che contiene nuove righe.
Per esempio
#!/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
Questo dà l'output:
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
Come puoi vedere, l'eco della variabile o l'iterazione sul cat
comando stampa ciascuna delle righe una per una correttamente. Tuttavia, il primo per il ciclo stampa tutti gli elementi su una sola riga. Qualche idea?