
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='()'
FOOBAR
Bashが次のように([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を参照しても拡張されます。