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

Zsh关联数组出现重复键问题求助

Zsh关联数组出现重复键的异常问题

在编写Zsh代码时,发现关联数组中出现了多个相同的键——这原本是不可能的情况。我在简单测试用例中尝试复现该行为却未成功:测试里给关联数组分配第二个相同键的键值对时,旧值会被正常覆盖。

打印键值对的代码

local key=''
local value=''
for key value in ${(kv)grid}; do
  echo "$key -> $value" >&2
done

部分排序后的输出

"1000,1000" -> #
"1000,1000" -> #
"1000,1000" -> #
"1000,1000" -> #
"1000,1001" -> #
"1000,1001" -> #
"1000,1001" -> #
"1000,1001" -> #
"1000,1002" -> #
"1000,1002" -> #
"1000,1002" -> #
"1000,1002" -> #
"1000,1003" -> #

可以看到存在多个相同键的键值对(部分值也相同)。该问题在z/OS Zsh 5.8.1和Mac Zsh 5.9上均出现。

我认为是自己的代码存在bug,希望有人能解释为何会出现这种关联数组存在重复键的情况。


补充信息

关联数组声明方式

declare -A grid

设置单元格的函数

set_cell()
{
  local srow=$1
  local scol=$2
  local sc=$3
  local skey="${srow},${scol}"

  grid["${skey}"]="$sc"
}

获取单元格值的函数

get_cell()
{
  local grow=$1
  local gcol=$2
  local gkey="${grow},${gcol}"
  local gval=${grid[(k)"${gkey}"]}
  echo "${gval}"
  return 0
}

调用get和set函数的方式

获取单元格:

local c
c=$(get_cell ${row} ${lcol})

设置单元格:

local out='O'
set_cell ${row} ${rcol} "${out}"

其中row和col为整数类型。

我还在打印值的循环前添加了类型检查:

echo "Type of grid: ${(t)grid}" >&2

得到输出:

Type of grid: association

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:14:56