Bashで感嘆符を使用した変数の置き換え

Bashで感嘆符を使用した変数の置き換え

私の.cfg bashスクリプトファイルには次の行があります。

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

}はどのように${!DDF_SOURCE計算されますか?うん!siebel_DATA_DATE_FORMAT、それは理解できません。

ベストアンサー1

それは間接拡張man bash、セクションに記録されている拡張、部分パラメータ拡張:

パラメーターの最初の文字が感嘆符(!)の場合、1段階変数間接指定が導入されます。 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

おすすめ記事