Quando você usa $(ls -l) , as novas linhas são removidas.
É feito assim.
O mesmo que 'ls -l' , que é idêntico ao $(ls -l) preferido.
Quando você quiser fazer algo com a saída de ls -l , será necessário fazer isso de maneira diferente.
ls -l |while read xx
do
echo $xx
((ii = ii + 1))
done
(Esteja ciente de que isso ( ls -l ) abre um novo shell e as variáveis definidas nesse shell não são "visíveis" fora desse shell, então ii não é visível fora desse loop.)