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