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

BASH中无法将beeline的show partitions命令输出存入数组如何解决

问题原因

你的数组赋值逻辑失败的核心原因是bash内置的read命令默认仅读取输入的第一行内容,遇到换行符就会终止读取操作,因此最终ptns数组中仅存入了首个分区的值。

你尝试切换tsv2格式未生效是因为show partitions的返回结果每行仅包含一个分区值,无论输出格式为csv2还是tsv2,不同分区天然以换行作为分隔符,不会出现制表符。

解决方案

方案1(推荐,适配Bash 4.0及以上版本)

使用专门用于将多行输入读入数组的mapfile(也叫readarray)命令,-t参数会自动去除每行末尾的换行符:

#!/usr/bin/env bash
PARTITIONS=$(/usr/bin/beeline -u "$hive_llap" --showHeader=false --outputformat=csv2 -e "use my_db; show partitions my_hist_table;")
echo -e "PARTITIONS: ${PARTITIONS}"
# 直接将多行结果读入数组
mapfile -t ptns <<< "${PARTITIONS}"
# 可打印数组长度验证是否读入全部分区
echo "分区总数量: ${#ptns[@]}"
for ptn in "${ptns[@]}"; do
        echo "ptn: ${ptn}"
done

方案2(兼容低版本Bash)

给read命令添加-d ''参数,将输入终止符设置为空字符,让read读取到所有内容后再停止:

# 将原数组赋值行替换为以下内容
IFS=$'\n' read -d '' -ra ptns <<< "${PARTITIONS}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:06:03