GNU/Linux >> Tutoriels Linux >  >> Linux

Lire des valeurs dans une variable shell à partir d'un tube

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.


Linux
  1. Linux bash :affectation de plusieurs variables

  2. Comment obtenir le nom de la branche git actuelle dans une variable dans un script shell ?

  3. Envoi d'un mail à partir d'un script shell Linux

  4. Shell - Écrire le contenu d'une variable dans un fichier

  5. Portée variable pour les scripts shell bash et les fonctions dans le script

Comment insérer des données CSV dans une table Sqlite via un Shell Pipe ?

Transformation automatique des nouvelles lignes dans l'affectation de variables Shell ?

Comment lire une variable à partir d'un fichier ?

Lire le fichier dans le tableau ?

Qu'est-ce que le sous-shell sous Linux ?

Comment faire écho dans le fichier