разместить многострочный вывод внутри переменной - PullRequest
8 голосов
/ 03 января 2012

Я пишу скрипт на bash и хочу, чтобы он выполнял команду и обрабатывал каждую строку отдельно. например:

LINES=$(df)
echo $LINES

вернет все выходные данные, преобразовав новые строки с пробелами.

пример:

если вывод должен был быть:

1
2
3

тогда я бы получил

1 2 3

как я могу поместить выходные данные команды в переменную, позволяя новым строкам по-прежнему быть новыми строками, чтобы при выводе переменной я получал правильный вывод?

Ответы [ 2 ]

11 голосов
/ 03 января 2012

Обычно в bash $v вызывает проблемы в большинстве случаев.Практически всегда вы имеете в виду "$v" в двойных кавычках.

LINES="`df`"     # double-quote + backtick
echo "$LINES"
OLDPATH="$PATH"
6 голосов
/ 03 января 2012

Нет, не будет.$(something) удаляет только завершающие символы новой строки.

Развертывание аргумента для эха разделяется на пробел и затем эхо объединяет отдельные аргументы с пробелом.Чтобы сохранить пробел, вам нужно снова заключить в кавычки:

echo "$LINES"

Обратите внимание, что присвоение не необходимо заключать в кавычки;Результатом раскрытия не является разбиение по словам при присваивании переменной и в аргументе case.Но его можно процитировать, и легче научиться просто всегда вводить кавычки.

...