С чего начать Первые шаги трек · 15 ступеней
Linux Labs

echo — вывод текста

3 мин bash

Печать строк и переменных; -n и -e, экранирование, когда лучше printf.

Шпаргалка

5 команд Версия для печати
  • echo "x=$var" с раскрытием переменной
  • echo 'literal $x' без раскрытия
  • echo -n / echo -e без \n / с escape
  • echo "x" >> file дописать в файл
  • printf '%s\n' "$v" переносимый аналог

Обзор

echo печатает аргументы в stdout, через пробел, с переводом строки в конце. Главный инструмент «показать значение» и «записать строку в файл».

bash
echo "Привет"                  # Привет
echo "PATH = $PATH"            # переменные раскрываются в "двойных"
echo 'literal $PATH'           # в 'одинарных' — как есть, без раскрытия
echo "$USER живёт в $HOME"

Ключи

3
bash
echo -n "без перевода строки"   # -n: не добавлять \n в конце
echo -e "столбец1\tстолбец2"    # -e: включить escape (\t \n \\)
echo "звёзды: *"                # в кавычках * НЕ раскрывается в имена файлов
echo *                          # БЕЗ кавычек — список файлов (globbing!)

Правило: переменные и спецсимволы — в двойных кавычках; полностью буквально — в одинарных. Подробнее про раскрытие — globbing и env-vars.

Ключ Что делает Пример
-n Не добавлять перевод строки в конце. echo -n "no newline"
-e Включить интерпретацию escape-последовательностей (\n, \t, \\). echo -e "col1\tcol2"
-E Явно отключить escape-последовательности (поведение по умолчанию в bash). echo -E "literal\ttext"

Ничего не найдено. Попробуй запрос короче.

Рецепты

2

Запись в файл

bash
echo "server { }" > nginx.conf          # создать/перезаписать
echo "log_level=debug" >> app.conf      # дописать
printf '%s\n' "строка1" "строка2" > f    # несколько строк надёжнее через printf
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf   # в защищённый файл (см. tee)

Когда printf

echo ведёт себя по-разному в разных оболочках (особенно -e/-n). Для скриптов и точного формата используй printf — он переносим и предсказуем:

bash
printf '%s\n' "$var"          # надёжный аналог echo "$var"
printf '%b\n' 'a\tb'          # с интерпретацией escape (как echo -e)

Неполадки

3

-e напечаталось как текст

Оболочка не bash (в sh/dash поведение иное) или echo внешний. Бери printf.

Звёздочка превратилась в список файлов

echo * без кавычек попадает под globbing. Заключай в кавычки: echo "*".

Перенос строки не там, где надо

echo всегда добавляет \n; чтобы без него — -n; чтобы вставить внутри — -e "...\n..." или printf.

См. также

  • printf — Форматированный вывод в shell — надёжнее echo, форматы и спецсимволы.
  • env-vars — env, export, $PATH, ~/.bashrc vs профили; почему «command not found».
  • bash-scripting — Переменные, условия, циклы, аргументы и безопасный режим set -euo pipefail.
Загрузка…