stocker la sortie de la commande dans un tableau en script shell

J’utilise ssh pour me connecter à une machine distante et y lire un fichier journal. À partir de ce fichier journal, basé sur certains jetons, j’extrais des journaux spécifiques et les stocke dans une variable. Chaque journal est dans une nouvelle ligne dans le fichier journal et les données peuvent contenir n’importe quel caractère, y compris des espaces.

array=("$(egrep "UserComments/propagateBundle-2013-10-19--04:42:13|UserComments/propagateBundle-2013-10-19--04:38:36|UserComments/propagateBundle-2013-10-19--04:34:24" /propagateBundle.log)") echo ${array[0]} echo "$array" 

Le premier écho imprime la sortie complète sur une ligne séparée par un espace blanc tandis que l’autre imprime les sorties sur une nouvelle ligne. Le problème est que je ne suis pas capable de sauvegarder cette sortie en tant que tableau. J’ai essayé ceci:

 newArray=("$array") max=${#newArray[@]} echo $max 

Mais faire écho à «max» donne «1» à l’écran. Comment puis-je enregistrer la sortie dans un tableau? J’ai aussi essayé d’utiliser

 IFS=\`\n` 

mais n’a pas pu obtenir les données dans un tableau.

MODIFIER

J’ai utilisé la solution proposée par Anubhav et cela a fonctionné comme du charme. Maintenant, j’ai rencontré un deuxième problème. Comme mes données contiennent des espaces blancs, le tableau s’est brisé en blanc et contenait à tort les commentaires sous la forme de plusieurs tableaux. Donc, j’ai utilisé

 IFS=\`\n` 

et a également utilisé un symbole $ avant les backticks. Bien que cela résout mon problème, je reçois toujours une exception dans les journaux:

 test.sh: line 11: n: command not found 

Aucune suggestion?

Ne mettez pas de guillemets dans la substitution de commande:

 array=( $(egrep "UserComments/propagateBundle-2013-10-19--04:42:13|UserComments/propagateBundle-2013-10-19--04:38:36|UserComments/propagateBundle-2013-10-19--04:34:24" /propagateBundle.log) ) 

Avec les guillemets comme dans votre code, la sortie entière est traitée comme une chaîne unique dans le tableau.

J’ai utilisé IFS = (‘\ n’) sinon tous les caractères “n” disparaissent des résultats et la commande de sorting ne fonctionne pas correctement. Voir ci-dessous, c’est une sortie personnalisée.

 #!/bin/bash IFS=('\n') raw=(`llq -f %id %o %gu %gl %st %BS %c`) echo echo ${raw[*]} | grep "step(s)" echo echo ${raw[*]} | grep "Step" echo ${raw[*]} | grep "\---*" echo ${raw[*]} | grep "bgp-fn*" | sort -k5 -r echo ${raw[*]} | grep "\---*" echo ${raw[*]} | grep "Step" echo echo ${raw[*]} | grep "step(s)" echo