Команда `:` в shell ничего не делает. Но используйте её: магия пустой команды

Если вы когда-нибудь заглядывали в чужой shell-скрипт и натыкались на одинокую строку с двоеточием — :, то наверняка задавались вопросом: «Что это такое?» На первый взгляд — ничего. Команда : в POSIX-совместимых оболочках (bash, zsh, sh) действительно не выполняет никаких действий. Она возвращает код завершения 0 (успех) и не обрабатывает аргументы. Однако опытные разработчики активно используют её в повседневной практике. Почему пустая команда так популярна? Разберёмся на основе материала «Ваша оболочка и магическое двоеточие».

Что такое : и чем она отличается от true?

Встроенная команда : — это синоним true в том смысле, что обе всегда возвращают 0. Но есть важное техническое различие: : не порождает дочерний процесс, в то время как вызов внешней утилиты /usr/bin/true создаёт подпроцесс. Хотя разница в производительности для одного вызова микроскопическая, в циклах или больших скриптах она может накапливаться. В большинстве современных оболочек : встроена в сам интерпретатор, что делает её максимально лёгкой.

Пять реальных сценариев применения :

1. Бесконечные циклы

Классический приём — while :; do ... done. Такой цикл выполняется вечно, пока его не прервут извне (Ctrl+C, условие с break). Альтернатива — while true; do ... done, но : короче и не требует вызова внешней команды true (хотя в bash true тоже встроена, но : — канонический способ).

while :
do
    echo "Сервер работает..."
    sleep 1
done

2. Заглушки в условных конструкциях

При разработке скрипта часто нужно временно «выключить» часть кода, оставив корректный синтаксис. Двоеточие идеально подходит в качестве тела if, for или case, которое пока ничего не делает, но структура остаётся валидной.

if [[ -f "$config" ]]; then
    : # TODO: обработать файл позже
else
    echo "Файл не найден"
fi

3. Проверка синтаксиса и пустые блоки

Иногда нужно проверить, что shell-скрипт не содержит синтаксических ошибок, но сценарий ещё не реализован. Команда : служит синтаксически корректным заполнителем. Это особенно полезно в CI/CD, где скрипт может быть запущен, но ещё не дописан.

4. Комментарии с heredoc (подстановка переменных)

Стандартный символ # — однострочный комментарий. Если вам нужен многострочный комментарий с подавлением подстановки переменных, можно использовать : с heredoc, перенаправляя его в stdin. Текст между << 'EOF' и EOF будет проигнорирован (команда : ничего не читает), но синтаксис корректен.

: << 'COMMENT'
Это многострочный комментарий.
Здесь можно писать всё, что угодно.
Даже символы доллара $VAR не обрабатываются.
COMMENT

5. Установка значений по умолчанию (поджаривание параметров)

Это, пожалуй, самый элегантный приём. Конструкция ${var:-default} подставляет значение по умолчанию, если переменная не задана или пуста. Но если нужно не только подставить, но и установить переменную в значение по умолчанию в рамках текущего контекста, используется ${var:=default}. Однако оператор := может быть нежелательным в некоторых сценариях (например, в списке аргументов). Тогда применяют : с такой подстановкой: : "${var:=default}". Команда : «проглатывает» результат, а переменная var получает значение default, если она не была задана. Многие опытные администраторы используют этот трюк в начале скриптов для инициализации конфигурационных параметров.

: "${TIMEOUT:=30}"
: "${LOG_DIR:=/var/log/myapp}"

Продвинутые техники

Использование : с перенаправлением stdout

Двоеточие можно комбинировать с перенаправлением вывода. Например, чтобы безопасно создать файл или проверить права на запись без изменения содержимого:

: > /tmp/lockfile   # очищает файл (создаёт пустой) или создаёт новый
: >> /var/log/app.log  # не меняет файл, но проверяет доступность для записи

: как источник truth в shell-функциях

Функция, которая должна вернуть успех всегда, может использовать : как последнюю команду (или единственную). Это чище, чем return 0:

noop() {
    :
}

Почему новость актуальна в 2026 году?

Несмотря на возраст UNIX (команда : появилась ещё в ранних версиях), многие разработчики до сих пор не знакомы с её возможностями. Статья, на которой основан этот материал, подчёркивает, что даже такой простейший инструмент может изменить привычку писать скрипты. С ростом популярности контейнеризации, CI/CD и Infrastructure as Code, shell-скрипты используются чаще, чем когда-либо. Умение писать лаконичный и эффективный код на shell — ценный навык. Двоеточие помогает сделать код чище, избежать лишних внешних процессов и улучшить читаемость.

Заключение

Команда : в shell — это не просто «ничего». Это джокер, который при грамотном применении упрощает инициализацию, отладку, комментирование и управление потоком. Используйте : вместо true в бесконечных циклах, для заглушек в условиях, для защиты параметров по умолчанию и для многострочных комментариев. Материал из источника наглядно показывает, что иногда самые полезные инструменты — те, которые «ничего не делают».

← Все статьи

Комментарии

Читайте также

Как я создал своего первого игрового персонажа за месяц: честный опыт прохождения курса «3D-моделирование в Blender» на Asibiont

15 июля 2026

Мастерство управления продуктами и роста: как обучение с ИИ трансформирует вашу карьеру в 2026 году

16 июля 2026

QA Automation Engineer: как AI меняет обучение автоматизации тестирования в 2026

19 июня 2026

Интеграция ASI Biont и Miro: AI-автоматизация досок для прогнозов и трендов

26 июня 2026

Как автоматизировать Amazon Seller Central с помощью AI-агента ASI Biont: руководство по интеграции без кода на 2026 год

15 июля 2026

Как лучшие инструменты Copilot ухудшили код-ревью. Вот как мы это исправили

11 июля 2026

Glimmer от Meta: новый шаг к персональному ИИ, о котором мечтает Цукерберг

11 августа 2026

Kubernetes + AI-агент: Как ASI Biont автоматизирует DevOps и снижает ручную работу SRE на 60%

14 июля 2026

Show HN: Clawk — дайте AI-агентам одноразовую Linux VM, а не свой ноутбук

13 июля 2026