#!/bin/bash
# index-ref.sh : Référencement de variable indirecte.
# Accéder au contenu du contenu d'une variable.

a=lettre_de_l_alphabet # La variable a contient le nom d'une autre variable.
lettre_de_l_alphabet=z

echo

# Référence directe.
echo "a = $a"          # a = lettre_de_l_alphabet

# Référence indirecte.
eval a=\$$a
echo "Maintenant, a = $a" # Maintenant, a = z

echo


# Maintenant, essayons de changer la référence du deuxième.

t=tableau_cellule_3
tableau_cellule_3=24
echo "\"tableau_cellule_3\" = $tableau_cellule_3"  # "tableau_cellule_3" = 24
echo -n "\"t\" déréférencé  = "; eval echo \$$t    # "t" déréférencé  = 24
# Dans ce cas simple, ce qui suit fonctionne aussi (pourquoi ?).
#   eval t=\$$t; echo "\"t\" = $t"

echo

t=tableau_cellule_3
NOUVELLE_VALEUR=387
tableau_cellule_3=$NOUVELLE_VALEUR
echo "Modification de la valeur de \"tableau_cellule_3\" en $NOUVELLE_VALEUR."
echo "\"tableau_cellule_3\" vaut maintenant $tableau_cellule_3"
echo -n "\"t\" déréférencé maintenant "; eval echo \$$t
# "eval" prend deux arguments "echo" et "\$$t" (valeur égale à $tableau_cellule_3)

echo

# (Merci, Stéphane Chazelas, pour la clarification sur le comportement ci-dessus.)


#  Une autre méthode est la notation ${!t}, discutée dans la section
#+ "Bash, version 2".
#  Voir aussi ex78.sh.

exit 0
