1

我想用一组键和值初始化一个数组,这样可以更改值但不能添加新键。

4

2 回答 2

5

似乎没有办法直接做到这一点。作为替代,您可以将带有键(索引)的只读关联数组放入另一个保留值的非只读数组中。

这样就无法将新键添加到前阵列,即使可以将新键添加到后阵列,它们也无法通过前阵列键访问。

像这样的东西:

declare -r -A front=([a]=0 [b]=1 [c]=2)
declare -a back=(alpha beta gamma)
# Read
echo "${back[front[a]]}"
# Write
back[front[a]]="ALPHA"
# Iterate
for k in "${!front[@]}"; do echo "$k = ${back[front[$k]]}"; done

然后,您可以将其包装到函数接口中。

于 2013-11-04T11:02:06.973 回答
1

使用内置readonly将其标记为完全只读:

$ declare -A x
$ x=([foo]=hello [bar]=world)
$ readonly -A x
$ x[baz]=zap
bash: x: readonly variable

但这也会消除您更改现有值的能力。

您要查找的功能不存在。

于 2013-11-04T10:53:26.277 回答