Comment "lire" une variable dans une boucle while

Comment puis-je lire à partir de la 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
30
demandé sur doubleDown 2012-10-29 17:19:21

4 réponses

Vous pouvez écrire:

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

Voir §3.6.7 "Ici Strings" dans le Bash Manuel De Référence.

(j'ai aussi pris la liberté d'ajouter quelques guillemets, et en ajoutant -r et IFS=read, pour éviter de trop salir le contenu de vos variables.)

52
répondu ruakh 2012-10-29 13:28:08

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 ... )
23
répondu choroba 2012-10-29 13:32:53

Vous pouvez simplement utiliser

your_code | while read line;
do
    echo $line
done

si vous ne faites pas attention à la boucle while exécutant dans un sous-puits (toutes les variables que vous modifiez ne seront pas visibles dans le parent après le done).

16
répondu Useless 2012-11-02 17:14:57
dos2unix filename.

e.g.:

dos2unix sshcopy.sh

Maintenant ça fonctionne pour moi.

-1
répondu Sachin Patel 2013-06-25 23:38:13