Problème Script bash. Sortir un tableau d'une boucle while !

Résolu
Krs182 -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
J'ai un problème que je n'arrive pas à résoudre seul (après 10h de recherche je bloque).
Je veux importer un quizz enregistré dans un fichier texte, puis le stoké dans une variable tableau à l'intérieur du programme jeu.
Je n'arrive pas à sortir une variable tableau d'une boucle while (celle-ci s'exécutant dans un sous-shell).

Voilà la partie du script qui ne marche pas :



recupquizz(){
nbrligne=$(cat /home/benj/Listequizz/listequestion.txt | wc -l)
#récupère le nombre de ligne
(( nbrqr = nbrligne / 2 ))
echo -e $nbrligne
echo -e $nbrqr
cat /home/benj/Listequizz/listequestion.txt | while read ligne ; do
# La première commande va chercher et concatène le fichier.txt et la passe | à la commande suivante.
((i++))
echo $i
echo $ligne
tabrecup[i]=$ligne
# J'essaye de récupérer la totalité du tableau dans cette variable

done

echo ${tabrecup[@]}
# Le tableau n'existe plus en dehors de la boucle while qui tourne dans un sous-shell

}

4 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Utilise la fonction
    mapfile
    pour construire un tableau à partir d'un fichier ;-))

    $ cat fich 
    Ligne 1
    Ligne 2
    Ligne 3
    Ligne 4
    Ligne 5
    Ligne 6
    Ligne 7
    Ligne 8
    Ligne 9
    Ligne 10

    $ mapfile -O 1 -t tab < fich

    $ echo ${tab[6]}
    Ligne 6

    $ echo ${tab[2]}
    Ligne 2

    3
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    pour éviter le sous shell
    while  read ligne ; do
    ...
    done < /home/benj/Listequizz/listequestion.txt
    0
  3. Krs182
     
    Merci de vos réponses. Je vais essayer tout ça !
    0
  4. Krs182
     
    J'ai pas réussi avec while read ligne ; do
    ...
    done < /home/benj/Listequizz/listequestion.txt.
    Les variables ne semblent toujours pas visible à l'extérieur de la boucle.
    En tout cas ça marche avec mapfile. Problème résolu !

    Merci à tous pour vos conseils !
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      $ cat txt
      aaa
      bbb
      ccc
      ddd
      $ unset t; while read l; do t[${#t[@]}]=$l; done < txt; printf "%s\n" ${t[@]}
      aaa
      bbb
      ccc
      ddd
      $ unset t; cat txt | while read l; do t[${#t[@]}]=$l; done; printf "%s\n" ${t[@]}

      $
      0