You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不使用eval与临时文件的情况下声明并初始化名称含变量的关联数组?

无需eval或source创建带变量名的Bash关联数组

在Bash中创建名称包含变量的关联数组时,直接使用declare -A tab$i=(...)会失效,依赖eval又存在安全风险。可以利用Bash 4.3及以上版本提供的**名称引用(nameref)**特性解决这个问题,无需eval或临时文件source操作。

声明并初始化动态命名的关联数组

for i in {1..3}; do
  # 建立名称引用,让arr指向tab$i这个动态生成的数组名
  declare -n arr="tab$i"
  # 通过引用变量声明关联数组并完成初始化
  declare -A arr=( [nom]="john" [comment]="this works!" )
  # 解除名称引用,避免后续操作误修改已有数组
  unset -n arr
done

# 验证结果
echo "${tab1[nom]}"       # 输出 john
echo "${tab2[comment]}"    # 输出 this works!

给已存在的动态数组赋值

如果已经提前声明了数组,也可以通过名称引用直接赋值:

# 先批量声明关联数组
for i in {1..3}; do
  declare -A "tab$i"
done

# 通过名称引用赋值
for i in {1..3}; do
  declare -n arr="tab$i"
  arr[age]="30"
  unset -n arr
done

echo "${tab3[age]}"    # 输出 30

注意事项

  • 该特性要求Bash版本≥4.3,可通过bash --version检查当前版本。
  • 使用完名称引用后,建议用unset -n解除引用,防止后续复用变量名时意外修改之前的数组。

内容的提问来源于stack exchange,提问作者Denis M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 04:55:04