用 BLOCKS 行填充 bash 数组

vge*_*h99 2 bash shell awk

我有一个文件(或命令的输出),其中包含由空行分隔的行块 - 如下所示:

1
2
3

4
5
6
Run Code Online (Sandbox Code Playgroud)

无法弄清楚如何为每个数组单元格使用“块”行填充 bash (4.4.12) 数组,例如

arr[0]='
1
2
3'

array[1]='
4
5
6'
Run Code Online (Sandbox Code Playgroud)

环顾四周,寻找类似的线程readarray, mapfile, play withIFS/read和其他替代方案,但无法弄清楚如何做“块”行,而不仅仅是一次一行。什么是魔法组合?

Cyr*_*rus 6

使用 bash:

declare -i c=0                      # set integer attribute

while IFS= read -r line; do
  [[ -z $line ]] && c+=1
  arr[$c]+="$line"$'\n'
done < file

declare -p arr                      # output array
Run Code Online (Sandbox Code Playgroud)

输出:

声明 -a arr=([0]=$'1\n2\n3\n' [1]=$'\n4\n5\n6\n')

  • 好的; 这比我以前采用的仅在累积完成后才将项目附加到数组的方法要干净得多。 (3认同)