Вики / Базовые команды
echo — вывод текста
Печать строк и переменных; -n и -e, экранирование, когда лучше printf.
echo печатает аргументы в stdout, через пробел, с переводом строки в конце.
Главный инструмент «показать значение» и «записать строку в файл».
echo "Привет" # Привет
echo "PATH = $PATH" # переменные раскрываются в "двойных"
echo 'literal $PATH' # в 'одинарных' — как есть, без раскрытия
echo "$USER живёт в $HOME"
echo -n "без перевода строки" # -n: не добавлять \n в конце
echo -e "столбец1\tстолбец2" # -e: включить escape (\t \n \\)
echo "звёзды: *" # в кавычках * НЕ раскрывается в имена файлов
echo * # БЕЗ кавычек — список файлов (globbing!)
Правило: переменные и спецсимволы — в двойных кавычках; полностью буквально — в одинарных. Подробнее про раскрытие — globbing и env-vars.
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)
echo ведёт себя по-разному в разных оболочках (особенно -e/-n). Для скриптов
и точного формата используй printf — он переносим и предсказуем:
printf '%s\n' "$var" # надёжный аналог echo "$var"
printf '%b\n' 'a\tb' # с интерпретацией escape (как echo -e)
-e напечаталось как текст
Оболочка не bash (в sh/dash поведение иное) или echo внешний. Бери printf.
Звёздочка превратилась в список файлов
echo * без кавычек попадает под globbing. Заключай в кавычки: echo "*".
Перенос строки не там, где надо
echo всегда добавляет \n; чтобы без него — -n; чтобы вставить внутри — -e "...\n..."
или printf.
echo "x=$var" # с раскрытием переменной
echo 'literal $x' # без раскрытия
echo -n / echo -e # без \n / с escape
echo "x" >> file # дописать в файл
printf '%s\n' "$v" # переносимый аналог
См. также
- Bash-скрипты (основы) — Базовые команды
- Переменные окружения и PATH — Базовые команды
- printf и echo (вывод) — Базовые команды