echo
Вывод строки в стандартный поток вывода
Описание
echo — одна из базовых утилит Unix, предназначенная для вывода текстовых строк в стандартный поток вывода (stdout). Команда присутствует в каждой Unix-подобной системе и является встроенной в большинство оболочек (bash, zsh, sh). История команды восходит к первым версиям Unix 1970-х годов, и с тех пор она остаётся неизменным инструментом для отладки, скриптования и формирования текстового вывода.
Помимо простого вывода текста, echo активно используется в скриптах для отображения сообщений пользователю, записи строк в файлы через перенаправление, передачи данных в пайп другим командам. С флагом -e поддерживает управляющие последовательности: переносы строк (\n), табуляции (\t), изменение цвета через ANSI-коды.
Важно понимать разницу между встроенным echo оболочки и внешней утилитой /bin/echo: их поведение по отношению к флагам и escape-последовательностям может различаться. Для переносимых скриптов часто рекомендуют printf вместо echo.
Синтаксис
- [OPTION] — флаги управления поведением (опциональны)
- [STRING] — одна или несколько строк для вывода; несколько аргументов разделяются пробелом
- Без аргументов выводит пустую строку
- По умолчанию в конце добавляется символ новой строки
\n
Флаги и опции
| Флаг | Описание | Пример |
|---|---|---|
-n |
Не добавлять символ новой строки в конце | echo -n "no newline" |
-e |
Включить интерпретацию escape-последовательностей (\n, \t, \\ и др.) |
echo -e "a\nb" |
-E |
Отключить интерпретацию escape-последовательностей (поведение по умолчанию) | echo -E "a\nb" |
\n |
Новая строка (требует -e) |
echo -e "line1\nline2" |
\t |
Горизонтальная табуляция (требует -e) |
echo -e "col1\tcol2" |
\r |
Возврат каретки (требует -e) |
echo -e "text\r" |
\\ |
Обратный слэш (требует -e) |
echo -e "path\\file" |
\a |
Звуковой сигнал (bell, требует -e) |
echo -e "\a" |
\0NNN |
Символ с восьмеричным кодом NNN (требует -e) |
echo -e "\041" |
\xHH |
Символ с шестнадцатеричным кодом HH (требует -e) |
echo -e "\x41" |
Паттерны использования
Запись в файл
echo "Hello" > file.txt # перезапись echo "More text" >> file.txt # добавление echo -e "line1\nline2" > file.txt
Вывод переменных
NAME="Alice"
echo "Hello, $NAME!"
echo "Home: $HOME"
echo "Path: ${PATH}"
Цветной вывод (ANSI)
echo -e "\e[32mGreen text\e[0m" echo -e "\e[31mError!\e[0m" echo -e "\e[1mBold text\e[0m" echo -e "\e[33mWarning\e[0m"
Передача в пайп
echo "hello world" | tr 'a-z' 'A-Z' echo " text " | tr -d ' ' echo "user:pass" | cut -d: -f1
Отладка скриптов
echo "DEBUG: var=$var" echo "Step 1: starting process..." echo "Exit code: $?"
Создание heredoc-контента
echo "#!/bin/bash" > script.sh echo "echo 'Auto-generated'" >> script.sh chmod +x script.sh
Советы и предупреждения
printf вместо echo в переносимых скриптах — его поведение одинаково во всех оболочках:
printf "Hello, %s!\n" "$NAME"
echo '$HOME' выведет буквально $HOME, а не путь.
RED='\e[31m'; NC='\e[0m'; echo -e "${RED}Error${NC}"
echo -e различается между встроенным echo оболочки и /bin/echo. В скриптах явно указывайте интерпретатор (#!/bin/bash) или используйте printf.
echo для вывода произвольных пользовательских данных без кавычек — это может привести к неожиданному поведению если данные содержат специальные символы (-e, -n).