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

