如何在 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='()'

为什么 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 被引用,它也会被扩展。

相关内容