Zmienne podstawienie ze wykrzyknikiem w bash


46

Mam następujące wiersze w pliku skryptu bash .cfg

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

jak jest ${!DDF_SOURCEoceniany? Byłoby !siebel_DATA_DATE_FORMAT, co nie ma dla mnie sensu.

Odpowiedzi:


65

Jest to rozwinięcie pośrednie , udokumentowane w man bashrozdziale ROZSZERZENIE , podsekcja Rozszerzenie parametru :

Jeśli pierwszym znakiem parametru jest wykrzyknik (!), Wprowadzany jest poziom pośredniej zmiennej. Bash używa wartości zmiennej utworzonej z reszty parametru jako nazwy zmiennej; zmienna ta jest następnie rozszerzana i ta wartość jest używana w pozostałej części podstawienia, a nie w wartości samego parametru. Jest to znane jako ekspansja pośrednia.

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.