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