Ответ 1
Вы хотите сказать
echo "$lines"
вместо
echo $lines
Разработать:
echo $lines
означает "Создать новую команду, заменив $lines
на содержимое переменной с именем lines
, разделив ее на пробел, чтобы сформировать нулевые или более новые аргументы в команде echo
. Например:
lines='1 2 3'
echo $lines # equivalent to "echo 1 2 3"
lines='1 2 3'
echo $lines # also equivalent to "echo 1 2 3"
lines="1
2
3"
echo $lines # also equivalent to "echo 1 2 3"
Все эти примеры эквивалентны, поскольку оболочка игнорирует определенный вид пробелов между отдельными словами, хранящимися в переменной lines
. На самом деле, если быть более точным, оболочка разбивает содержимое переменной на символы специальной переменной IFS
(Internal Field Separator), которая по умолчанию (по крайней мере, в моей версии bash) относится к пространству трех символов, вкладке и новой строке.
echo "$lines"
, с другой стороны, означает создание одного нового аргумента из точного значения переменной lines
.
Подробнее см. разделы "Расширение" и "Разделение слов" на странице руководства bash.