我想用一组键和值初始化一个数组,这样可以更改值,但不能添加新键。
答案 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
但这也会消除你改变现有价值的能力。
您正在寻找的功能不存在。