无法将直线 "show partitions" 命令的输出放入 BASH 中的数组
Can't put output of beeline "show partitions" command into array in BASH
在我的 bash 脚本中,我想使用 beeline 发出“show partitions”命令,然后遍历作为该命令输出的分区。该命令工作正常,但我不知道如何迭代迭代。这是我的代码:
#!/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}"
IFS=$'\n' read -ra ptns <<< "${PARTITIONS}"
echo "ptns: ${ptns}"
for ptn in "${ptns[@]}"; do
echo "ptn: ${ptn}"
done
这是输出:
PARTITIONS: yr=2021/mo=08
yr=2021/mo=2
yr=2021/mo=4
ptns: yr=2021/mo=08
ptn: yr=2021/mo=08
似乎输出正确地进入了 $PARTITIONS,但我试图将其放入数组 ptns 的尝试不起作用。我尝试在我的 IFS 语句中使用 outputformat=tsv2 和 \t,我得到了同样的结果,即 $PARTITIONS 显示了明显的换行符(不是制表符,即使使用 tsv2)。
考虑更换:
IFS=$'\n' read -ra ptns <<< "${PARTITIONS}"
与:
read -d' ' -ra ptns <<< "${PARTITIONS}"
应该生成:
$ typeset -p ptns
declare -a ptns=([0]="yr=2021/mo=08" [1]="yr=2021/mo=2" [2]="yr=2021/mo=4")
另一种选择,特别是如果来自 ${PARTITIONS}
的每一行都可能包含白色 space:
$ mapfile -t ptns <<< "${PARTITIONS}"
$ typeset -p ptns
declare -a ptns=([0]="yr=2021/mo=08" [1]="yr=2021/mo=2" [2]="yr=2021/mo=4")
在我的 bash 脚本中,我想使用 beeline 发出“show partitions”命令,然后遍历作为该命令输出的分区。该命令工作正常,但我不知道如何迭代迭代。这是我的代码:
#!/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}"
IFS=$'\n' read -ra ptns <<< "${PARTITIONS}"
echo "ptns: ${ptns}"
for ptn in "${ptns[@]}"; do
echo "ptn: ${ptn}"
done
这是输出:
PARTITIONS: yr=2021/mo=08
yr=2021/mo=2
yr=2021/mo=4
ptns: yr=2021/mo=08
ptn: yr=2021/mo=08
似乎输出正确地进入了 $PARTITIONS,但我试图将其放入数组 ptns 的尝试不起作用。我尝试在我的 IFS 语句中使用 outputformat=tsv2 和 \t,我得到了同样的结果,即 $PARTITIONS 显示了明显的换行符(不是制表符,即使使用 tsv2)。
考虑更换:
IFS=$'\n' read -ra ptns <<< "${PARTITIONS}"
与:
read -d' ' -ra ptns <<< "${PARTITIONS}"
应该生成:
$ typeset -p ptns
declare -a ptns=([0]="yr=2021/mo=08" [1]="yr=2021/mo=2" [2]="yr=2021/mo=4")
另一种选择,特别是如果来自 ${PARTITIONS}
的每一行都可能包含白色 space:
$ mapfile -t ptns <<< "${PARTITIONS}"
$ typeset -p ptns
declare -a ptns=([0]="yr=2021/mo=08" [1]="yr=2021/mo=2" [2]="yr=2021/mo=4")