web-dev-qa-db-fra.com

Comment "lire" une variable sur une boucle while

Comment puis-je lire à partir d'une variable avec while read line?

Par exemple:

the_list=$(..code..)

while read line
do
        echo $line

done < $the_list

l'utilisation du code ci-dessus me donne une erreur:

./copy.sh: line 25: $the_list: ambiguous redirect
36
Crazy_Bash

Tu peux écrire:

while IFS= read -r line
do
    echo "$line"
done <<< "$the_list"

Voir §3.6.7 "Here Strings" dans le Bash Reference Manual .

(J'ai également pris la liberté d'ajouter des guillemets doubles et d'ajouter -r et IFS= à read, pour éviter de trop fouiner avec le contenu de vos variables.)

58
ruakh

Si vous n'utilisez pas la variable pour autre chose, vous pouvez même vous en passer:

while read line ; do
    echo $line
done < <( ... code ... )
24
choroba

Vous pouvez simplement utiliser

your_code | while read line;
do
    echo $line
done

si cela ne vous dérange pas que la boucle while s'exécute dans un sous-shell (toutes les variables que vous modifiez ne seront pas visibles dans le parent après le done).

19
Useless