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

在Bash中如何基于两个数组构建键值对形式的关联数组?

问题原因

你使用了双层循环的错误逻辑:外层遍历所有时间值,内层每次都会将全部星期键的取值覆盖为当前外层的时间值。当循环结束时,所有键都会被最后一个遍历到的时间07:00覆盖,因此输出全为07:00。

解决方法

你需要先将awk输出的结果转换为真实的Bash索引数组,再按下标一一对应给关联数组赋值即可。如果需要保持原顺序输出,遍历原始的星期数组取关联数组的值即可。
正确代码如下:

#!/bin/bash
# 提取数据并去掉方括号,转为Bash索引数组
a=($(awk -F'{' '{gsub(/\[|\]/,"",$1);print $1}' test.txt))
b=($(awk -F'[{}]' '{gsub(/\[|\]/,"",$2);print $2}' test.txt))

declare -A arr
# 按下标一一对应赋值关联数组
len=${#a[@]}
for ((i=0;i<len;i++)); do
    arr[${a[$i]}]=${b[$i]}
done

# 按原顺序输出结果
for day in "${a[@]}"; do
    echo -n "${arr[$day]} "
done
echo

运行后输出就是你期望的03:00 05:00 07:00 03:00 05:00 07:00 07:00。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:27:02