#1 Le 10/05/2021, à 19:24
- Tawal
[Résolu] Bash - Remplir Tableau Associatif Dynamiquement
Hello,
je cherche à remplir un tableau associatif dynamiquement à travers une boucle while.
Ça fonctionne très bien avec un tableau indicé numériquement mais pas avec un tableau associatif.
Voici le code en question :
#!/bin/bash
while read ind val
do
TabAsso[$ind]=$val
echo "TabAsso[$ind]=${TabAsso[$ind]}"
done < <(echo "ind1 val1"; echo "ind2 val2"; echo "ind3 val3")
echo
for i in ${!TabAsso[@]}
do
echo "TbAss[$i]=${TabAsso[$i]}"
done
et le reour :
TabAsso[ind1]=val1
TabAsso[ind2]=val2
TabAsso[ind3]=val3
TbAss[0]=val3
Qu'est-ce qui ne va pas ?
Car si , dans la boucle while, je mets un tableau indicé numériquement, ça fonctionne.
Là, on voit que le tableau associatif existe dans la boucle while mais pas en dehors, je ne comprends pas ...
Merci de m'éclairer
Dernière modification par Tawal (Le 10/05/2021, à 21:37)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#2 Le 10/05/2021, à 19:34
- Hizoka
Re : [Résolu] Bash - Remplir Tableau Associatif Dynamiquement
Ajoute au debut du script :
declare -A TabAsso
ce qui donne
TbAss[ind1]=val1
TbAss[ind2]=val2
TbAss[ind3]=val3
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#3 Le 10/05/2021, à 19:44
- Tawal
Re : [Résolu] Bash - Remplir Tableau Associatif Dynamiquement
Un autre retour (avant que ne je lise ton message Hizoka)
elem1=val3
elem2=val3
elem3=val3
en ajoutant en fin de script :
echo "elem1=${TabAsso["ind1"]}"
echo "elem2=${TabAsso["ind2"]}"
echo "elem3=${TabAsso["ind3"]}"
C'est juste pour montrer le coté "imprévisible" quand on ne fait pas les choses correctement.
Merci Hizoka, c'est en effet la solution.
À force de lire qu'il n'est pas (un petit forcément oublié à mon avis) nécessaire de déclarer les variables dans bash car elles ne sont pas "spécialement" typées ...
En voilà une belle démonstration du contraire
Merci encore.
Dernière modification par Tawal (Le 10/05/2021, à 19:46)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#4 Le 10/05/2021, à 19:50
- kamaris
Re : [Résolu] Bash - Remplir Tableau Associatif Dynamiquement
C'est prévisible en fait : les chaines de caractères sont évaluées à 0 en contexte arithmétique.
Or les crochets encadrant l'indice d'un tableau indexé définissent un contexte arithmétique, au même titre que ((…)) :
$ echo $((ind1))
0
$
Dernière modification par kamaris (Le 10/05/2021, à 19:51)
Hors ligne
#5 Le 10/05/2021, à 20:22
- Tawal
Re : [Résolu] Bash - Remplir Tableau Associatif Dynamiquement
Thanks, you're allright
Dernière modification par Tawal (Le 10/05/2021, à 21:38)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne