Bashで読み取り専用、グローバル、および連想配列を初期化する方法は?

Bashで読み取り専用、グローバル、および連想配列を初期化する方法は?

Bash バージョン "GNU bash, バージョン 4.2.39(1)-release (x86_64-redhat-linux-gnu)" で次のコードを実行します。

function foobar {
  declare -rgA FOOBAR=([foo]=bar)
}
foobar
declare -p FOOBAR
# Output: declare -Ar FOOBAR='()'

FOOBARBashが次のように([foo]=bar)初期化しないのはなぜですかdeclare -p?同じ宣言は関数の外部でも機能します。

declare -rgA FOOBAR=([foo]=bar)
declare -p FOOBAR
# Output: declare -Ar FOOBAR='([foo]="bar" )'

同様に、次のコードもFOOBAR機能しますが、読み取り専用ではありません。

function foobar {
  declare -gA FOOBAR
  FOOBAR=([foo]=bar)
}
foobar
declare -p FOOBAR
# Output: declare -A FOOBAR='([foo]="bar" )'

これはバグか機能ですか?

ベストアンサー1

function foobar {
  declare -rgA 'FOOBAR=([foo]=bar)'
}
foobar
declare -p FOOBAR

(追加引用符に注意してください)私のために働いた。

以下でも見つけることができます。

function foobar {
  var="something tricker"
  declare -rgA 'FOOBAR=([foo]=$var)'
}
foobar
declare -p FOOBAR

$ varを参照しても拡張されます。

おすすめ記事