bash, expansion de paramètres et indirection
2013-11-15
Aujourd’hui, je viens de découvrir l’indirection de paramètres en bash.
La syntaxe est la suivante : ${!PARAMETER}
L’expansion ne donne pas la valeur du paramètre lui même mais la valeur du paramètre dont le nom est contenu dans PARAMETER.
$ TEMP="hello world"
$ TEXT=TEMP
$ echo ${!TEXT}
hello world
Cela permet de faire de jolies choses comme ceci en s’abstrayant d’eval…
XXX_user=rootX
XXX_password=rootX123
XXX_host=sqlserver01.example.com
YYY_user=rootY
YYY_password=rootY123
YYY_host=sqlserver02.example.com
ZZZ_user=rootZ
ZZZ_password=rootZ123
ZZZ_host=sqlserver03.example.com
connect_to() {
local database="$1"
user_key="${database}_user"
password_key="${database}_password"
host_key="${database}_host"
mysql -h "${!host_key}" -u "${!user_key}" -p"${!password_key}" "$database"
}
connect_to ZZZ
Ci-dessous une documentation bien claire sur l’expansion des paramètres en bash