#1 Le 01/04/2018, à 08:47
- selem5962
[Résolu] Script Bash - Lecture d'un tableau
Bonjour,
Je me permets de vous solliciter dans le cadre de la réalisation d'un script Bash dans lequel je rencontre une problématique pour lire un tableau INDICE par INDICE et non MOT par MOT.
Il s'agit de lire un fichier et de rentrer chacune de ses lignes dans un tableau.
#Création du tableau tabj :
j=0
while IFS= read -r lignej
do
tabj[j]=$lignej
let "j = $j+1"
done < fichier.txt
Lorsque j'utilise cette fonction :
#printf '%s\n' "${tabj[@]}"
J'ai les bons résultats qui s'affichent à savoir :
tata
toto
tata toto titi
Par contre avec cette fonction :
u=0
#parcourir le tableau
for mot in ${tab[u]}
do
echo 'Mot : ' $mot
done
J'obtiens les résultats suivants :
tata
toto
tata
toto
titi
Comment puis je faire pour que la variable $mot contienne 'tata toto titi' et non 'tata' puis 'titi'...
Merci d'avance.
Dernière modification par Ayral (Le 01/04/2018, à 18:33)
Hors ligne
#2 Le 01/04/2018, à 09:07
- pingouinux
Re : [Résolu] Script Bash - Lecture d'un tableau
Bonjour,
u=0 #parcourir le tableau for mot in ${tab[u]} do echo 'Mot : ' $mot done
J'obtiens les résultats suivants :
tata
toto
tata
toto
titi
Tu ne peux pas obtenir ce résultat, sauf si tab[0] contient "tata toto tata toto titi"
- Comment as-tu rempli tab ?
- Tu n'incrémentes pas u dans la boucle.
Hors ligne
#3 Le 01/04/2018, à 09:14
- selem5962
Re : [Résolu] Script Bash - Lecture d'un tableau
Je remplis le tableau avec le code suivant :
i=0
while IFS= read -r ligne
do
tab[i]=$ligne
let "i = $i+1"
done < fichier.txt
Et j'obtiens une liste mot pat mot lorsque je demande de lire le contenu du tableau. L'une des lignes comprends 3 mots séparés par un espace ce qui provoque à l'affichage de 3 mots l'un en dessous de l'autre.
Des recherches réalisées il ressort que la fonction for fait de la lecture mot à mot contrairement à la fonction while ce qui provoquerait cette erreur de lecture. Je ne sais pas comment contourner ce problème.
Hors ligne
#4 Le 01/04/2018, à 09:29
- pingouinux
Re : [Résolu] Script Bash - Lecture d'un tableau
for mot in "${tab[@]}"
do
echo 'Mot : ' "$mot"
done
Hors ligne
#5 Le 01/04/2018, à 09:33
- credenhill
Re : [Résolu] Script Bash - Lecture d'un tableau
hello
une méthode
$ for ix in ${!tab[@]}; do echo 'Mot' ${tab[$ix]}; done
Mot tata
Mot toto
Mot tata toto titi
Hors ligne
#6 Le 01/04/2018, à 09:37
- selem5962
Re : [Résolu] Script Bash - Lecture d'un tableau
Merci cela fonctionne, à bientôt.
Hors ligne
#7 Le 01/04/2018, à 14:17
- Watael
Re : [Résolu] Script Bash - Lecture d'un tableau
UMQ!
for item in "${tableaul[@]}"; do : whatever with "$item"; done
il faut TOUJOURS mettre des guillemets autour des variables. TOUJOURS !
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne