linux-labs

Вики / Базовые команды

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"       # переносимый аналог

См. также