Он читается построчно, но вы забыли процитировать $ {x [@]}
, что означает, что к нему был применен оператор split + glob.
readarray x < <(ls -la)
printf %s "${x[@]}"
Или удалить последний символ новой строки из каждой из этих строк:
readarray -t x < <(ls -la)
printf 'line: %s\n' "${x[@]}"
Или с помощью оператора split + glob :
IFS=$'\n' # split on newline
set -o noglob
x=($(ls -la))
(в отличие от readarray -rt
, что метод удаляет пустые строки (маловероятно, но возможно, что это может произойти в выводе ls -la
))
Если вы хотите получить список имен файлов (включая скрытые) без других ls -l
, вы бы предпочли использовать:
shopt -s nullglob dotglob
x=(*)
В отличие от ls -a
, он не включает .
или ..
впрочем. Если бы они вам действительно были нужны, вы бы сделали вместо этого:
shopt -s nullglob
x=(.* *)