Змінна підстановка знаком оклику в басі


46

У моєму файлі сценарію bash .cfg у мене є наступні рядки

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

як ${!DDF_SOURCE} оцінюється? Було б !siebel_DATA_DATE_FORMAT, що для мене не має сенсу.

Відповіді:


65

Це непряме розширення , задокументоване в man bashрозділі РОЗШИРЕННЯ , підрозділ Розширення параметра :

Якщо першим символом параметра є знак оклику (!), Вводиться рівень змінної непрямості. Bash використовує значення змінної, утвореної з решти параметра, як ім'я змінної; Потім ця змінна розширюється, і це значення використовується в решті підстановки, а не в значенні самого параметра. Це відомо як непряме розширення.

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.