, ,

Bash: Accès par indirection

L'accès à une valeur par indirection est possible en shell. Pour cela il faut procéder à deux substitutions de variable l’une après l’autre. Le détail de la substitution de variable est abordé dans le wiki etapes_de_substitution . Pour relancer une phase de substitution on utilisera la commande eval. On indique au shell que le premier caractère ’$’ est à prendre littéralement. L’inhibition caractère sert à cela, on écrit donc:

repertoire=HOME
 
# première substitution
echo \${$repertoire}
${HOME}

Ensuite il faut refaire une autre évaluation pour substituer la variable HOME avant de faire l’exécution de la ligne de commande:

eval echo \${$repertoire}
/home/yoann
Cette opération en programmation s’appelle une indirection. Une variable référence une autre variable qui contient une valeur. La référence dans le cas du Bash se présente sous la forme du nom de la variable qui contient la valeur. Le Bash propose l’écriture ${!var} pour faire la substitution de la variable var avec une indirection.

En Bash, pour faire un accès par indirection, on peut donc également écrire:

echo ${!repertoire}
/home/yoann