Echo newline in Bash prints literal \n
For those saying «it works for me», the behavior of echo varies quite a bit between versions. Some will even print the «-e» as part of their output. If you want predictable behavior for anything nontrivial, use printf instead (as in @sth’s answer).
I could not get any of the suggestions in this answer working, because, as it turns out, I was attempting to use it in a function that returns a value, and all the echo (and printf) messages in the function were being appended to the return value after being individually stripped of newlines. Here is a question regarding this, with an extremely thorough answer: stackoverflow.com/questions/27872069/… This was like a three hour mystery tour.
Also notable: in Unix & Linux Stack Exchange, the accepted answer to How to add new lines when using echo
echo -ne «hello\nworld» (you needed the n flag to interpret escapes) — but as others say, different echo commands may have different results!
@Konchog echo -n man page entry on archlinux ` -n do not output the trailing newline` It has nothing to do with interpreting escapes
22 Answers 22
printf behaves more consistently across different environments than echo .
The OP asked about echo, not printf; and @choroba’s answer below, which uses the -e option, fills the bill perfectly.
With some versions of echo , -e is just printed in the output itself so I think this answer is perfectly valid since echo isn’t consistent here (unless we’re talking about a specific version).
Make sure you are in Bash.
All these four ways work for me:
echo -e "Hello\nworld" echo -e 'Hello\nworld' echo Hello$'\n'world echo Hello ; echo world
As mentioned by various other -e does NOT work for all distributions and versions. In some cases it is ignored and in others it will actually be printed out. I don’t believe this fixed it for the OP so should not be accepted answer
Words of the form $’string‘ are treated specially. The word expands to string, with backslash-escaped characters replaced as specified by the ANSI C standard.
@EvgeniSergeev Not sure what you mean, but it didn’t work for me either first. And that’s because I was using double quotes and turns out this works only with single quotes! Tried in Terminal on Mac.
For me this is the only right answer to the asked question. It does not use another command and relies on bash. An extra echo does the wrong job here. One point I want to add: It seems to only work on bourne-like shells, which is basically every shell used out there. (see here)
echo "Hello," echo "" echo "World!"
echo «» works for me and I think it’s the simplest form to print a new line, even if this doesn’t directly answer the question. Cheers.
i had trouble getting the other answers to work on Mac. i ended up going with this incredibly obvious solution. 🙂
On the off chance that someone finds themselves beating their head against the wall trying to figure out why a coworker’s script won’t print newlines, look out for this:
#!/bin/bash function GET_RECORDS() < echo -e "starting\n the process"; >echo $(GET_RECORDS);
As in the above, the actual running of the method may itself be wrapped in an echo which supersedes any echos that may be in the method itself. Obviously, I watered this down for brevity. It was not so easy to spot!
You can then inform your comrades that a better way to execute functions would be like so:
#!/bin/bash function GET_RECORDS() < echo -e "starting\n the process"; >GET_RECORDS;
пустая строка трактуется как true?
насколько я понял, что так, выражение echo $(echo «» || echo bar) выводит пустую строку. Это вообще, как то не удобно, можно было бы в скрипте написать, типа echo $(echo $1 || echo bar) , проверив на пустоту аргумента. Ну это ладно.
В общем, как правильно проверить на отсутствие аргумента в скрипте.
if [ $#1 -eq 0 ]; then echo "Usage: $0 " fi
echo выводит свои аргументы в stdout. Если у неё получилось вывести текст в stdout, что во встроенном echo из bash получается вообще всегда, она возвращает 0, то есть «успех».
joy4eg ★★★★★ ( 05.01.17 18:07:07 MSK )
Последнее исправление: joy4eg 05.01.17 18:07:55 MSK (всего исправлений: 1)
Здесь нет проверки того, что выводится, вне зависимости от того, трактуется ли пустая строка как true или как false.
echo «» вернёт, обычно, 0 (так как успешно вывело).
|| , выполнив свой первый аргумент, увидит «0» (шелловское true). Обрадуется. Второй аргумент выполнять не надо, пустая строка левого вывелась, ок. Вернёт (не выведет, а именно вернёт) 0.
$(. ) подставят _вывод_ команды внутри них, не возвращаемое значение. То бишь пустую строку от echo «» . И будет в итоге всё как и задумывалось.
Проверить можно, к примеру, сравнив $# с количеством аргументов, или пользуясь shift ,
Это не bash-only? Даже в zsh такого не вижу, не говоря о всяких sh.
Команда echo в Linux — синтаксис и параметры
echo — это встроенная команда Linux. Основное предназначение выводить строку текста на экран, однако часто используется в других ситуациях, например нужно добавить в файл единицу или сохранить строку в новый документ.
Синтаксис
- -e. Использовать Escape поддержку вывода.
- -E. Не использовать Escape последовательности вывода.
- -n. Не переводит результат выполнения команды на новую строку.
Про параметры это все, есть дополнительные аргументы, которые работают при включенной опции Escape последовательности «-e».
- /c. Убрать перевод строки.
- /r. Показывает возврат каретки.
- /b. Удаляет предыдущий символ.
- /t. Показывает горизонтальную вкладку
- /v. Выводит вертикальную вкладку.
- /n. Перевод на новую строку.
Примеры
Для начала выведем на экран слово тест.
Часто для настройки маршрутизации трафика в локальную сеть нужно добавить в конец файла ip_forward единицу. Чтобы не открывать этот файл специальными редакторами например nano или vim, воспользуемся эхо и специальным символом «>» перенаправление вывода.
Подсчитаем количество байт в слове «линукс», для этого одной директивы эхо не хватит. Нужно воспользоваться дополнительной командой «wc».
wc — это утилита, которая считает количество слов или строк в тексте. Она устанавливается по умолчанию в дистрибутивах GNU Линукс.
Как видно на скриншоте выше 13 байт. Почему 13? Дело в том что в кодировке utf8 один русский символ занимает 2 байта. В слове линукс шесть букв. Получается 6*2 = 12. Где же еще один байт? 1 байт занимает пустая строка.
Также эхо может выводить на экран значение переменной. Чтобы посмотреть как это работает, объявим переменную linux с помощью «export».
export — это встроенная команда оболочки bash. Обычно используется для объявления переменной.
Рассмотрим как работает команда с опциями.
Включим интерпретацию специальных последовательностей, параметр «-e» и переведем каждое слово на новую строку, аргумент «\n».
Команда echo в Linux
Команда echo — это очень простая и в то же время часто используемая встроенная команда оболочки Bash. Она имеет только одно назначение — выводить строку текста в терминал, но применяется очень часто в различных скриптах, программах, и даже для редактирования конфигурационных файлов.
В этой статье мы рассмотрим что представляет из себя команда echo linux, как ее можно использовать и в каких ситуациях. Но сначала рассмотрим синтаксис самой команды.
Команда echo linux
Команда echo — это не системная утилита, у нее нет исполняемого файла. Она существует только внутри интерпретатора Bash. Синтаксис команды echo linux очень прост:
$ echo опции строка
Опций всего несколько, давайте рассмотрим их, чтобы вы могли лучше ориентироваться в работе утилиты:
- -n — не выводить перевод строки;
- -e — включить поддержку вывода Escape последовательностей;
- -E — отключить интерпретацию Escape последовательностей.
Это все опции, если включена опция -e, то вы можете использовать такие Escape последовательности для вставки специальных символов:
- /c — удалить перевод строки;
- /t — горизонтальная табуляция;
- /v — вертикальная табуляция;
- /b — удалить предыдущий символ;
- /n — перевод строки;
- /r — символ возврата каретки в начало строки.
Пожалуй, это все, что нужно знать о команде echo, а теперь давайте рассмотрим как с ней работать.
Примеры работы echo
Давайте рассмотрим как пользоваться echo. Сначала просто выведем строку на экран:
echo Linux Open Source Software Technologies
Также можно вывести значение переменной. Сначала объявим переменную:
Затем выведем ее значение:
Как уже говорилось, с помощью опции -e можно включить интерпретацию специальных последовательностей. Последовательность \b позволяет удалить предыдущий символ. Например, удалим все пробелы из строки:
echo -e «Linux \bopen \bsource \bsoftware \btechnologies»
Последовательность \n переводит курсор на новую строку:
echo -e «Linux \nopen \nsource \nsoftware \ntechnologies»
С помощью \t вы можете добавить горизонтальные табуляции:
echo -e «Linux \topen \tsource \tsoftware \ttechnologies»
Можно совместить переводы строки и табуляции:
echo -e «Linux \tnopen \tnsource \tnsoftware \tntechnologies»
Точно так же можно применить вертикальную табуляцию:
echo -e «Linux \vopen \vsource \vsoftware \vtechnologies»
С помощью последовательности \r можно удалить все символы до начала строки:
echo -e «Linux \ropen source software technologies»
Последовательность -c позволяет убрать перевод на новую строку в конце сообщения:
echo -e «Linux open source software technologies\c»
Дальше — больше. Вы можете разукрасить вывод echo с помощью последовательностей управления цветом Bash. Для доступны такие цвета текста:
Например. раскрасим нашу надпись в разные цвета:
echo -e «\033[35mLinux \033[34mopen \033[32msource \033[33msoftware \033[31mtechnologies\033[0m»
С основными параметрами команды echo разобрались, теперь рассмотрим еще некоторые специальные символы bash. Вы можете вывести содержимое текущей папки просто подставив символ *:
Также можно вывести файлы определенного расширения:
Я уже говорил, что echo можно использовать для редактирования конфигурационных файлов. Вы можете использовать запись echo в файл linux, если он пуст:
echo 1 > /proc/sys/net/ipv4/ip_forward
Если файл не пуст, и вам необходимо добавить свою строчку в конец файла используйте символ перенаправления вывода >>:
echo «UUID=09ec0871-2f55-4dd5-aeb2-cacc4a67907c /var/tmp btrfs subvol=@/var/tmp 0 0» >> /etc/fstab
Если строка содержит какие-либо специальные символы или может быть понята интерпретатором неоднозначно, следует заключить ее в кавычки.
Выводы
В этой статье была рассмотрена команда echo linux. Несмотря на свою простоту, она может применяться для решения различных задач и незаменима при написании простых скриптов. Надеюсь, эта информация была вам полезной.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.