Что такое встроенный `:` используется в Bash? [дубликат]

Я взломал множество сценариев оболочки, и иногда самые простые вещи сбивают меня с толку. Сегодня я наткнулся на сценарий, который широко использовал встроенную команду bash : (двоеточие).

Документация кажется достаточно простой:

: (двоеточие) 
: [аргументы] 
 

Ничего не делать, кроме расширения аргументов и выполнения перенаправления. Статус возврата равен нулю.

Однако раньше я видел это только при демонстрации расширения оболочки.В сценарии, с которым я столкнулся, широко использовалась эта структура:

if [ -f ${file} ]; then
    grep some_string ${file} >> otherfile || :
    grep other_string ${file} >> otherfile || :
fi

На самом деле были сотни grep, но они больше похожи. Нет никаких перенаправлений ввода / вывода, кроме простой структуры выше. Позже в сценарии возвращаемые значения не проверяются.

Я читаю это как бесполезную конструкцию, которая говорит: «или ничего не делай». Какой цели может служить завершение этих greps фразой «или ничего не делать»? В каком случае эта конструкция приведет к другому результату, нежели простое удаление || : из всех экземпляров?

46
08.03.2021, 13:38
0 ответов

Теги

Похожие вопросы