É porque o readarray não remove o delimitador (nova linha por padrão), a menos que seja chamado com a opção -t
.
Usando o declare -p var
mais simples para imprimir valores de matriz, veja isto:
$ readarray array < <(echo -e "Jenny\nJane\nJessica")
$ declare -p array
declare -a array=([0]=$'Jenny\n' [1]=$'Jane\n' [2]=$'Jessica\n')
Você pode ver as novas linhas finais de cada elemento.
Enquanto isso:
$ readarray -t array < <(echo -e "Jenny\nJane\nJessica")
$ declare -p array
declare -a array=([0]="Jenny" [1]="Jane" [2]="Jessica")
não tem novas linhas iniciais.
O uso de uma expansão de variável sem nome é apenas uma má ideia, apenas não.