Ele lê por linha, mas você esqueceu de citar ${x[@]}
, o que significa que o operador split + glob foi aplicado a ele.
readarray x < <(ls -la)
printf %s "${x[@]}"
Ou para remover o último caractere de nova linha de cada uma dessas linhas:
readarray -t x < <(ls -la)
printf 'line: %s\n' "${x[@]}"
Ou usando o operador split + glob :
IFS=$'\n' # split on newline
set -o noglob
x=($(ls -la))
(ao contrário de readarray -rt
, esse método remove linhas vazias embora (improvável embora não impossível de ocorrer na saída de ls -la
))
Se você quiser ter a lista de nomes de arquivos (incluindo os ocultos) sem as outras informações de ls -l
, prefira usar:
shopt -s nullglob dotglob
x=(*)
Ao contrário de ls -a
, não inclui .
nem ..
. Se você realmente quisesse, você faria:
shopt -s nullglob
x=(.* *)