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.

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.