如何在shell脚本中将命令的输出拆分为数组?

问题描述

我已经执行了一个生成表单数据的命令

111111
222222
333333
444444
555555

我在命令中定义了一个变量,只是回显那个变量来处理这个数据

现在我想在 shell 脚本中将此数据存储到一个数组中

my_array[0]=111111
my_array[1]=222222
.....
so on

喜欢这个

我尝试了几件事,但所有这些都存储了索引 [0]。我想对这些数据执行一些算术运算,这就是为什么我要将其转换为数组形式。

 my_array=()
 select sum(a1) sum,date(create_timestamp)  date from student where date(create_timestamp) >= 'YYYY-MM-DD' and  date(create_timestamp) <= 'YYYY-MM-DD' group by date" | sed '1d'| while read sum date; do
        # echo $sum
        # echo $date
        my_array=( "$sum" )
         echo $my_array
#        echo ${my_array[0]}
done

解决方法

我认为您的意思是 my_array+=( "$sum" ) 添加元素而不是覆盖整个数组,但如果您信任输出格式,为什么不一次性分配所有内容而不是使用 read 循环?>

mapfile -t my_array < <( 
 select sum(a1) sum,date(create_timestamp) date
   from student 
   where date(create_timestamp) >= 'YYYY-MM-DD' 
     and  date(create_timestamp) <= 'YYYY-MM-DD'
   group by date" | sed '1d' 
)