bashでの感嘆符による変数置換


46

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

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

${!DDF_SOURCE} はどのように評価されますか?それは!siebel_DATA_DATE_FORMAT、私には意味がありません。

回答:


65

それは、セクション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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.