如何使用另一个命令输出管道来初始化bash数组?

时间:2009-06-09 16:34:05

标签: bash shell

有没有办法管道输出一个列出一堆数字的命令(每个数字在一个单独的行中)并用这些数字初始化一个bash数组?

详细说明: 这列出了3个变更清单编号,这些编号已在以下日期范围内提交。然后将输出传送到cut以进一步过滤以获得更改列表编号。

p4 changes -m 3 -u edk -s submitted @2009/05/01,@now | cut -d ' ' -f 2

E.g。 :

422311
543210
444000

如何将此列表存储在bash数组中?

3 个答案:

答案 0 :(得分:54)

您可以在ticks下执行命令并将Array设置为

ARRAY=(`command`)

或者,您可以将命令的输出保存到文件中并同样地将其保存,

command > file.txt
ARRAY=(`cat file.txt`)

或者,只是下面评论中建议的以下表格之一,

ARRAY=(`< file.txt`)
ARRAY=($(<file.txt))

答案 1 :(得分:9)

如果您使用bash 4+,则它具有以下特殊命令:mapfile也称为readarray,因此您可以像这样填充数组:

declare -a a
readarray -t a < <(command)

对于更便携的版本,您可以使用

declare -a a
while read i; do
  a=( "${a[@]}" "$i" )
done < <(command)

答案 2 :(得分:0)

非常类似于#4,但对我来说看起来更好一些。 :)

declare -a a
readarray -t a <<< $(command)