Objectifs
- Créer un tableau associatif (l’équivalent d’un dictionnaire ou “hash map”) pour stocker des paires clé-valeur.
- Accéder, modifier et ajouter des éléments en utilisant des chaînes de caractères comme clés.
- Itérer sur les clés ou les valeurs d’un tableau associatif.
- Comprendre quand utiliser un tableau associatif plutôt qu’un tableau indexé.
Explications détaillées
Notions clés
Alors que les tableaux standards utilisent des nombres comme indices (0, 1, 2, …), les tableaux associatifs utilisent des chaînes de caractères (des “clés”) pour stocker et retrouver des valeurs. C’est une structure de données extrêmement utile pour représenter des objets ou des configurations.
Important : C’est une fonctionnalité de Bash version 4 et supérieures.
Déclaration : declare -A
Avant de pouvoir utiliser un tableau associatif, vous devez le déclarer explicitement avec declare -A. C’est une étape obligatoire.
declare -A mon_dictionnaire
Initialisation et Accès
L’initialisation et l’accès se font avec une syntaxe similaire aux tableaux indexés, mais en utilisant des chaînes comme clés.
- Initialisation :
user=( [nom]="Alice" [role]="admin" [id]=123 ) - Accès :
echo ${user[nom]}→Alice - Modification/Ajout :
user[role]="editor"
Itération
Pour parcourir un tableau associatif, vous devez d’abord récupérer la liste de ses clés.
${!user[@]}: Donne la liste de toutes les clés.- Une fois que vous avez les clés, vous pouvez itérer dessus avec une boucle
forpour accéder aux valeurs correspondantes.
L’ordre dans lequel les clés sont retournées n’est pas garanti.
Syntaxe / Usages
# Déclaration obligatoire
declare -A config
# Remplissage
config[host]="localhost"
config[port]=5432
config[user]="postgres"
# Lecture
echo "Connexion à ${config[user]}@${config[host]}:${config[port]}"
# Itération sur les clés
echo "--- Configuration ---"
for cle in "${!config[@]}"; do
echo "$cle = ${config[$cle]}"
done
# Afficher le nombre d'éléments
echo "Nombre de paramètres : ${#config[@]}"
# Supprimer un élément
unset config[port]
Exemples
# 1. Décrire un objet
declare -A voiture
voiture[marque]="Renault"
voiture[modele]="Clio"
voiture[annee]=2021
voiture[couleur]="bleu"
echo "Ma voiture est une ${voiture[marque]} ${voiture[modele]} de ${voiture[annee]}."
# 2. Compter les occurrences de mots dans une phrase
declare -A compte_mots
phrase="un deux deux trois trois trois"
for mot in $phrase; do
# On incrémente le compteur pour ce mot
((compte_mots[$mot]++))
done
# Afficher les résultats
for mot in "${!compte_mots[@]}"; do
echo "Le mot '$mot' apparaît ${compte_mots[$mot]} fois."
done
Bonnes pratiques
- Toujours déclarer avec
declare -Aavant toute utilisation. C’est la source d’erreur la plus fréquente. - Utilisez les tableaux associatifs chaque fois que vous avez besoin de relier des libellés à des valeurs. C’est beaucoup plus lisible et maintenable que d’utiliser des variables séparées (
USER_NOM,USER_ROLE, etc.). - Comme pour les tableaux indexés, citez toujours vos expansions (
"${mon_tableau[$cle]}") pour gérer correctement les valeurs contenant des espaces.
Pièges courants
- Oublier
declare -A: Si vous oubliez la déclaration, Bash essaiera de traiter votre tableau comme un tableau indexé, ce qui donnera des résultats incorrects ou des erreurs.user[nom]="Alice"sera interprété commeuser[0]="Alice". - Oublier les accolades pour l’accès : Il faut
echo ${user[nom]}, pasecho $user[nom]. - Portabilité : Les tableaux associatifs ne font pas partie du standard POSIX
sh. Vos scripts ne fonctionneront qu’avec Bash (v4+). Si la portabilité est une exigence, vous ne pouvez pas les utiliser.
Exercices
-
Profil utilisateur :
- Créez un tableau associatif nommé
profilpour vous décrire. - Ajoutez les clés
prenom,villeethobby_prefere. - Écrivez un script qui affiche une phrase de présentation en utilisant les valeurs de ce tableau.
- Créez un tableau associatif nommé
-
Configuration d’application :
- Créez un tableau associatif
app_configavec les clésenv(valeur “production”),debug(valeur “false”), etapi_url(valeur “https://api.exemple.com”). - Écrivez une boucle qui affiche toutes les paires clé/valeur de la configuration.
- Créez un tableau associatif
-
Traducteur simple :
- Créez un tableau associatif
traductionsqui mappe quelques mots du français vers l’anglais ([bonjour]="hello",[monde]="world"). - Écrivez un script qui prend un mot en argument et affiche sa traduction s’il la connaît, ou “Traduction non trouvée” sinon.
- Créez un tableau associatif