How to initialize a bash array with output piped f

2019-01-11 02:39发布

问题:

Is there any way to pipe the output of a command which lists a bunch of numbers (each number in a separate line) and initialize a bash array with those numbers?

Details: This lists 3 changelist numbers which have been submitted in the following date range. The output is then piped to cut to filter it further to get just the changelist numbers.

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

E.g. :

422311
543210
444000

How is it possible to store this list in a bash array?

回答1:

You can execute the command under ticks and set the Array like,

ARRAY=(`command`)

Alternatively, you can save the output of the command to a file and cat it similarly,

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

Or, simply one of the following forms suggested in the comments below,

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


回答2:

If you use bash 4+, it has special command for this: mapfile also known as readarray, so you can fill your array like this:

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

for more portable version you can use

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


回答3:

Quite similar to #4 but looks a bit better for me. :)

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


标签: bash shell