660 votes

Capture de plusieurs lignes en une variable bash

J’ai un script « myscript » qui affiche ce qui suit :

dans un autre script, je donne la parole :

et `` obtient la valeur

Y a-t-il un moyen de stocker le résultat avec les sauts de ligne, ou avec le caractère « \n », donc je peux sortir avec ' `` ' ?

1229voto

Jonathan Leffler Points 299946

En fait, le RÉSULTAT contient ce que vous voulez démontrer:

echo "$RESULT"

Ce que vous montrez est ce que vous obtenez à partir de:

echo $RESULT

Comme indiqué dans les commentaires, la différence est que (1) le double-cité de la version de la variable (echo "$RESULT") conserve interne de l'espacement de la valeur exactement comme il est représenté dans la variable - retours à la ligne, tabulations, plusieurs ébauches et de tout - alors que (2) la version non cotées (echo $RESULT) remplace chaque séquence d'un ou de plusieurs espaces, les tabulations et les retours à la ligne avec un seul espace. Ainsi, (1) conserve la forme de la variable d'entrée, tandis que (2) crée potentiellement une très longue ligne de sortie avec des "mots" séparés par des espaces simples (où un " mot " est une séquence de non-caractères espace; il n'y a aucun des caractères alphanumériques dans les mots).

97voto

l0b0 Points 10719

Un autre écueil est que la substitution de commande - $() - bandes de fuite des retours à la ligne. Probablement pas toujours important, mais si vous voulez vraiment préserver exactement ce qui était de sortie, vous devrez utiliser une autre ligne et certains de citer:

RESULTX="$(./myscript; echo x)"
RESULT="${RESULTX%x}"

Ceci est particulièrement important si vous voulez gérer tous les possible les noms de fichiers (pour éviter un comportement indéfini comme d'exploitation sur le mauvais fichier).

27voto

user2574210 Points 41

Dans le cas que vous êtes intéressé par une ligne spécifique, utilisez un tableau de résultats :

16voto

Lurchman Points 31

En plus de la réponse donnée par @l0b0, j’ai juste eu la situation où nécessaire à la fois conserver aucune sortie de retours à la ligne droite par le contrôle de script et code de retour du script. Et le problème avec la réponse de l0b0 est que le ' echo x' $ a été remise à zéro ? Retour à zéro... alors j’ai réussi à trouver cette solution très rusée :

0voto

Rahul Reddy Points 75

Comment à ce sujet, il va lire chaque ligne à une variable et qui peut être utilisé par la suite ! dire la sortie de myscript est redirigée vers un fichier appelé myscript_output

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X