{{tag>dev bash shell}}
====== 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 [[cours:informatique:fun_mooc:maitrise_du_bash_univ-reunion:230_constructions_syntaxiques#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