Substitution de variable avec un point d'exclamation dans bash

46

J'ai les lignes suivantes dans mon fichier de script .cfg bash

DDF_SOURCE="siebel_DATA_DATE_FORMAT"
DATA_DATE_FORMAT=${!DDF_SOURCE}

comment ${!DDF_SOURCE} est-il évalué? Ce serait !siebel_DATA_DATE_FORMAT, ce qui n'a pas de sens pour moi.

van
la source

Réponses:

65

Il s’agit d’une expansion indirecte , documentée dans la man bashsection EXPANSION , sous-section Paramètre Expansion :

Si le premier caractère du paramètre est un point d'exclamation (!), Un niveau d'indirection de variable est introduit. Bash utilise la valeur de la variable formée à partir du reste du paramètre comme nom de la variable. cette variable est ensuite développée et cette valeur est utilisée dans le reste de la substitution, plutôt que la valeur du paramètre lui-même. Ceci est connu sous le nom d'expansion indirecte.

bash-4.2$ DDF_SOURCE="siebel_DATA_DATE_FORMAT"

bash-4.2$ siebel_DATA_DATE_FORMAT='Hello Indirect Redirection'

bash-4.2$ DATA_DATE_FORMAT=${!DDF_SOURCE} # siebel_DATA_DATE_FORMAT must get value before this line

bash-4.2$ echo $DATA_DATE_FORMAT
Hello Indirect Redirection
homme au travail
la source