A divisão é feita com IFS
como o delimitador (que contém um espaço, nova linha e tab por padrão). Defina o IFS
apenas para a nova linha:
$ IFS=$'\n' a=($(printf "1 2\n2 3\n"))
$ echo ${a[0]}
1 2
$ echo ${a[1]}
2 3
Isso alterará IFS
para o shell, então é melhor salvá-lo antes e restaurá-lo:
OLD_IFS="$IFS"
IFS=$'\n' array=($(grep '^#' threewords | cut -c2-))
IFS="$OLD_IFS"
E não há absolutamente nenhum motivo para fazer:
cat threewords | grep '^#'
grep
é perfeitamente capaz de ler arquivos:
grep '^#' threewords
Como Stephane observa que, ao submeter a saída de um comando a uma expansão adicional do shell, deve-se desabilitar o globbing usando set -f
:
$ help set
...
-f Disable file name generation (globbing).
Caso contrário:
$ cd /; a=( $(printf "*\n") )
$ echo ${a[@]}
bin boot cdrom dev etc home ...