Bash:一个只读的关联数组,可以修改但不能扩展

时间:2013-11-04 10:49:45

标签: bash

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

2 个答案:

答案 0 :(得分:3)

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

这样就无法向前端阵列添加新密钥,即使可以向后阵列添加新密钥,也无法通过前阵列密钥访问它们。

这样的事情:

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

然后您可以将其包装到功能界面中。

答案 1 :(得分:1)

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

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

但这也会消除你改变现有价值的能力。

您正在寻找的功能不存在。