Sostituzione variabile con un punto esclamativo in bash


46

Ho le seguenti righe nel mio file di script .cfg bash

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

come viene ${!DDF_SOURCEvalutato}? Sarebbe !siebel_DATA_DATE_FORMAT, il che non ha senso per me.

Risposte:


65

Questa è un'espansione indiretta , documentata nella man bashsezione EXPANSION , sottosezione Parameter Expansion :

Se il primo carattere del parametro è un punto esclamativo (!), Viene introdotto un livello di indiretta variabile. Bash utilizza il valore della variabile formata dal resto del parametro come nome della variabile; questa variabile viene quindi espansa e quel valore viene utilizzato nel resto della sostituzione, anziché il valore del parametro stesso. Questo è noto come espansione indiretta.

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.