Команда `:` в 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 в бесконечных циклах, для заглушек в условиях, для защиты параметров по умолчанию и для многострочных комментариев. Материал из источника наглядно показывает, что иногда самые полезные инструменты — те, которые «ничего не делают».

← Все статьи

Комментарии

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

Cambridge International A-Level Chemistry (9701): как AI-обучение помогает сдать один из самых сложных экзаменов

26 июля 2026

Кембридж IGCSE Бизнес-исследования (0450): Полное руководство по курсу и как обучение на основе ИИ на asibiont.com может помочь вам добиться успеха

26 июля 2026

Освоение автономных систем: Практическое руководство по ROS 2, SLAM и компьютерному зрению с Asibiont

26 июля 2026

GrapheneOS: как защита от извлечения данных из заблокированных устройств превращает Android в крепость

26 июля 2026

Почему я выбрал курс Flutter и Dart — кроссплатформенная разработка на Asibiont: честная история успеха

26 июля 2026

SenseNova-Vision: CV-комбайн, который заменяет десятки моделей в одном интерфейсе

26 июля 2026

Управление сервомоторами через PCA9685 и AI-агент: как ASI Biont ускоряет робототехнику в 10 раз

26 июля 2026

Google раскрыла $94,1 млрд в акциях SpaceX: 6% доля и её значение для космической индустрии

26 июля 2026

Как подключить TFT LCD (ILI9341, ST7789) к AI-агенту ASI Biont через ESP32 и MQTT: пошаговый гайд

26 июля 2026