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
相关产品推荐
相关产品推荐

