В связи с этим вопросом возникают две независимые проблемы.
Команда ls
построена так, чтобы действовать по-разному при записи в терминал и при записи в файл или конвейер. В этом можно убедиться, сравнив эти две команды
ls
ls | cat
В первом примере ls
может видеть, что он пишет на терминал, и поэтому форматирует его вывод для читателя. Во втором примере ls
может видеть, что он пишет в файл или канал, поэтому он создает одну запись в каждой строке. Вы можете переопределить эти две настройки с помощью аргументов -1
или -C
.
Когда вы назначаете ls -l
переменной, новые строки сохраняются. Однако в вашем случае вы не указываете переменную при ее использовании, поэтому каждый запуск «пробелов» (все, что не печатает видимые символы) преобразуется в одиночный пробел. Сравните эти результаты
var = $ (ls -l); эхо $ var
var = $ (ls -l); echo "$ var"
См. $ VAR против $ {VAR} и цитировать или не цитировать для получения более подробной информации. Также обратите внимание, что я использовал $ (...)
вместо `...`
. Предлагаемый повторяющийся ответ с пониманием обратной кавычки объясняет, почему.