TGViewer
Bash Days | Linux | DevOps Bash Days | Linux | DevOps @bashdays · 23.6K subscribers
Post #318 13.3K
Не бей себя ушами по щекам!

Вопрос который я задаю на собесах, возможно с подвохом. Частенько ставит в ступор соискателей. Короче.

Есть два бесконечных bash цикла:

while :
do
done



while true
do
done


Вопрос: почему в первом случае используется «:», а во втором «true»?


И тут начинается… у людей включается javascript мышление и они начинают троить. Раз есть задача, значит есть и разница в поведении, значит будут какие-то разные ожидаемые результаты.

Рисуют мне какие-то формулы, строят гипотезы, даже пытаются доказать свою правоту и послать меня на хуй.

Ведь как происходит, пишешь ты годами bash скрипты и даже не задумываешься, а схренали я использую «:» а не «true»? Да потому что оно нахер не всралось про это думать, работает и ок.

На самом деле эти циклы делаю одно и тоже. Объяснение простое:

Команда «:» всегда возвращает 0. Да «:» это команда, попробуй её запустить, а следом выполнить echo $? и получишь 0.

Эта пустая команда, которая ничего не делает и всегда завершается успехом. Ее используют, там где в синтаксисе скрипта требуется какая-либо команда.

Для while справедливо требуется продолжение, вот мы и продолжаем с помощью «:» чтобы интерпретатор не засыпал ошибками. Этакая заглушка, для синтаксической корректности.

Ну а так как true тоже команда и всегда возвращает статус 0, получается что «:» и true = идентичны. Просто написать двоеточие намного быстрее.

Хотя с другой стороны, если писать true, то код становится более читаемым.


Ноги растут из древних Bourne Shell, где не было встроенных команд ни true ни false. Использовали именно «:».

Получается «:» легаси? Ну можно и так сказать. Если хочешь чтобы твои скрипты работали в древних оболочках, используй «:». А если похер, то делай true.

Вот что лучше читается?

if true; then
echo "hello bashdays"
fi


if :; then
echo "hello bashdays"
fi


Мне очевиднее первый вариант, если не знать за «:», то словишь ступор. Такие дела. Изучай.

tags: #linux #bash
—
@BASHDAYS
More from @bashdays
  1. Sep 30, 2026↗️ Для всех, кто строит 15 октября Cloud․ru соберет инженеров, которые строят и эксплуатир…
  2. Sep 29, 2026Самый жаркий холивар в команде — это не systemd, а какие заказать роллы на всю команду. Од…
  3. Sep 24, 2026Post #1565
  4. Sep 23, 2026Здрасти приехали, решил я в кой-то веке воспользоваться услугами Codex, создал аккаунт, по…
  5. Sep 22, 2026Всем привет, с вами TagdTagd. Сегодня опять поднимем тему архивов, но немного с другой сто…
  6. Sep 15, 2026Всем привет, с вами TagdTagd. И это вторая часть. Практическая. С первой частью можешь озн…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →