如何通过1次MySQL查询将多列结果分别存入不同的bash数组中
实现方案
你可以通过逐行拆分单次查询的制表符分隔结果,分别追加到对应数组实现需求,避免多次连接数据库的开销:
# 提前初始化三个空数组 data1=() data2=() data3=() # 单次查询+逐行处理写入数组 while IFS=$'\t' read -r col1 col2 col3 _; do data1+=("$col1") data2+=("$col2") data3+=("$col3") done < <(mysql -u root -p'password' -D'users_info' --batch -se 'SELECT data1, data2, data3 FROM users_logs')
关键说明
IFS=$'\t'显式指定行内容按制表符拆分,避免字段内包含空格时拆分错误- 末尾的
_用于承接行内多余的输出内容,避免异常内容污染第三个字段的取值 - 使用进程替换
< <(命令)喂给while循环,避免管道模式下循环在子shell运行、循环结束后数组值丢失的问题 - 加
--batch参数强制MySQL输出使用制表符分隔列、换行分隔行,兼容性更强
验证示例
你可以执行以下命令确认数组写入正确:
# 打印所有数组内容 echo "data1: ${data1[*]}" echo "data2: ${data2[*]}" echo "data3: ${data3[*]}" # 取第N行的对应字段(索引从0开始) echo "第1行的三个字段值:${data1[0]} | ${data2[0]} | ${data3[0]}"
内容的提问来源于stack exchange,提问作者Frogg1ven
相关产品推荐
相关产品推荐

