[unix] bash에서 느낌표로 변수 대체

내 .cfg bash 스크립트 파일에 다음 줄이 있습니다.

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

방법이다 ${!DDF_SOURCE} 평가? 그것은 것 !siebel_DATA_DATE_FORMAT나에게 이해가되지 않는다.



답변

이는 EXPANSION 섹션의 Parameter Expansion 섹션에 설명 된 간접 확장입니다 .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


답변