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

Résolu/Fermé
Krs182 - 14 févr. 2016 à 18:58
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 - 16 févr. 2016 à 09:23
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

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
14 févr. 2016 à 19:17
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
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
15 févr. 2016 à 08:42
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
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
16 févr. 2016 à 09:23
$ 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