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

Bash:只读关联数组,可以修改但不能扩展,bash,Bash,我想用一组键和值初始化数组,这样可以更改值,但不能添加新键。使用内置的只读将其标记为完全只读: $ declare -A x $ x=([foo]=hello [bar]=world) $ readonly -A x $ x[baz]=zap bash: x: readonly variable 但这也会消除您更改现有值的能力 您正在查找的功能不存在。使用内置的只读功能将其标记为完全只读: $ declare -A x $ x=([foo]=hello [bar]=world) $ reado

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

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

$ declare -A x
$ x=([foo]=hello [bar]=world)
$ readonly -A x
$ x[baz]=zap
bash: x: readonly variable
但这也会消除您更改现有值的能力


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

使用内置的
只读功能将其标记为完全只读:

$ declare -A x
$ x=([foo]=hello [bar]=world)
$ readonly -A x
$ x[baz]=zap
bash: x: readonly variable
但这也会消除您更改现有值的能力


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

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

这样就无法将新密钥添加到前阵列,即使可以将新密钥添加到后阵列,也无法通过前阵列密钥访问这些密钥

大概是这样的:

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

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

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

这样就无法将新密钥添加到前阵列,即使可以将新密钥添加到后阵列,也无法通过前阵列密钥访问这些密钥

大概是这样的:

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

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

除非最新版本的BASH中有某些内容,否则我不相信有任何此类BASH数组可用。除非最新版本的BASH中有某些内容,否则我不相信有任何此类BASH数组可用。根据OP
可以更改值,但不能添加新键。
根据OP
可以可以更改值,但不能添加新键。