Я зламав безліч скриптів оболонок, і іноді найпростіші речі мене бентежать. Сьогодні я натрапив на сценарій, який широко використовував :вбудований (двокрапковий) баш.
Documenation здається досить простим:
: (a colon) : [arguments]Не робіть нічого, крім розширення аргументів та виконання переадресацій. Статус повернення дорівнює нулю.
Однак я раніше бачив це лише в демонстраціях розширення оболонки. Випадок використання в сценарії, на який я зіткнувся, широко використовував цю структуру:
if [ -f ${file} ]; then
grep some_string ${file} >> otherfile || :
grep other_string ${file} >> otherfile || :
fi
Насправді було сотні грепів, але вони просто більше однакових. Ніяких перенаправлень вводу / виводу немає, крім простої структури вище. Пізніше в сценарії не перевіряються значення повернення.
Я читаю це як марну конструкцію, яка говорить "чи нічого не роблю". Якій цілі могло бути закінчення цих грепів на "чи нічого не робити"? У якому випадку ця конструкція спричинить інший результат, ніж просто відсторонення || :від усіх випадків?
:як альтернативуtrue. Можливо,errexitце встановлено, і автор не переймається статусом виходу деяких команд.