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