'How to convert command output to an array line by line in bash?

I'm trying to convert the output of a command like echo -e "a b\nc\nd e" to an array.

X=( $(echo -e "a b\nc\nd e") )

Splits the input for every new line and whitespace character:

$ echo ${#X[@]}
> 5

for i in ${X[@]} ; do echo $i ; done
a
b
c
d
e

The result should be:

for i in ${X[@]} ; do echo $i ; done
a b
c
d e


Solution 1:[1]

readarray -t ARRAY < <(COMMAND)

Solution 2:[2]

Set the IFS to newline. By default, it is space.

[jaypal:~] while IFS=$'\n' read -a arry; do 
echo ${arry[0]}; 
done < <(echo -e "a b\nc\nd e")
a b
c
d e

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 jaypal singh