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可以可以更改值,但不能添加新键。