Ceci est une autre option
$ read test < <(echo hello world)
$ echo $test
hello world
si vous voulez lire beaucoup de données et travailler sur chaque ligne séparément, vous pouvez utiliser quelque chose comme ceci :
cat myFile | while read x ; do echo $x ; done
si vous souhaitez diviser les lignes en plusieurs mots, vous pouvez utiliser plusieurs variables à la place de x comme ceci :
cat myFile | while read x y ; do echo $y $x ; done
alternativement :
while read x y ; do echo $y $x ; done < myFile
Mais dès que vous commencez à vouloir faire quelque chose de vraiment intelligent avec ce genre de choses, vous feriez mieux d'opter pour un langage de script comme perl où vous pourriez essayer quelque chose comme ceci :
perl -ane 'print "$F[0]\n"' < myFile
Il y a une courbe d'apprentissage assez raide avec perl (ou je suppose que n'importe lequel de ces langages) mais vous le trouverez beaucoup plus facile à long terme si vous voulez faire autre chose que le plus simple des scripts. Je recommanderais le livre de recettes Perl et, bien sûr, le langage de programmation Perl de Larry Wall et al.
Utiliser
IFS= read var << EOF
$(foo)
EOF
Vous pouvez astuce read
en acceptant d'un tuyau comme celui-ci :
echo "hello world" | { read test; echo test=$test; }
ou même écrire une fonction comme celle-ci :
read_from_pipe() { read "[email protected]" <&0; }
Mais cela ne sert à rien - vos affectations de variables risquent de ne pas durer ! Un pipeline peut générer un sous-shell, où l'environnement est hérité par valeur, et non par référence. C'est pourquoi read
ne se soucie pas de l'entrée d'un tube - c'est indéfini.
Pour votre information, http://www.etalabs.net/sh_tricks.html est une collection astucieuse du cruft nécessaire pour lutter contre les bizarreries et les incompatibilités des obus bourne, sh.