Igyekeztem minimalista szinten változtatni a te kódodon, de nekem látszólag megy, azaz a teljes ls kimenet minden szava egy tömbelem.
#!/bin/bash
a=(`ls -l |
while read; do
echo "$REPLY"
done`)
printf '!!! %s !!!\n' "${a[@]}"
exit 0
Ha neked az kell, hogy a szóközöknél ne essen szét, hanem csak a soremeléseknél, akkor sokkal egyszerűbb megoldás az értékadás előtt átállítani az IFS változót:
#!/bin/bash
IFS='
'
a=( ...
mondjuk így.