我在 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='()'
为什么 Bash 不FOOBAR
根据 进行([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 被引用,它也会被扩展。