Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile

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 smile

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