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

Résolu/Fermé
Signaler
-
Messages postés
18410
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
18 janvier 2022
-
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

Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 587
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
Messages postés
18410
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
18 janvier 2022
5 533
hello
pour éviter le sous shell
while  read ligne ; do
...
done < /home/benj/Listequizz/listequestion.txt
0
Merci de vos réponses. Je vais essayer tout ça !
0
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
Messages postés
18410
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
18 janvier 2022
5 533
$ 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