#!/usr/local/bin/bash
out=`grep apache README`
echo $out;
Обычно grep показывает каждое совпадение в отдельной строке при запуске из командной строки. Однако в приведенных выше сценариях новая строка, разделяющая каждое совпадение, исчезает. Кто-нибудь знает, как можно сохранить новую строку?
Ответы:
Вы теряете его не в задании, а в эхо. Вы можете ясно увидеть это, если:
echo "${out}"
Вы увидите аналогичный эффект со следующим скриптом:
x="Hello, I am a string with newlines" echo "=====" echo ${x} echo "=====" echo "${x}" echo "====="
который выводит:
И, что не имеет отношения к вашему вопросу, но я все равно хотел бы об этом упомянуть, я предпочитаю использовать конструкцию $ (), а не обратные кавычки, просто для дополнительного преимущества возможности вкладывать команды. Итак, ваша строка сценария становится:
Теперь это может выглядеть не иначе (и это не так), но делает возможными более сложные команды, такие как:
источник
Поместите $ out в кавычки:
#!/usr/local/bin/bash out=`grep apache README` echo "$out";
источник
Цитирование переменных в bash сохраняет пробелы.
Например:
#!/bin/bash var1="A B C D" echo $var1 # A B C D echo "$var1" # A B C D
поскольку новые строки - это пробелы, они "удаляются"
источник
Объединение других ответов в один лайнер:
echo "($(grep apache README))"
источник