Подтвердить что ты не робот

Bash - Почему для частных функций требуется двойное подчеркивание (__)? Почему (_) для функций завершения bash?

Когда вы смотрите на bash функции, поставляемые с вашим Linux по выбору, вы часто видите, что функции private (частные в смысле рекомендации) записываются следующим образом:

__private_func() {
    :
}

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

_complete_func() {
    __private_func
}

То, что я хотел бы знать, это: Каковы причины этого? И есть ли какое-то соглашение о том, как префикс частных функций?

4b9b3361

Ответ 1

Я просмотрел справочную страницу bash и стандарт оболочки POSIX, но не смог найти что-либо относительно этого соглашения об именах. Тем не менее, используется символ подчеркивания для указания зарезервированных или внутренних имен в C. Чтобы процитировать руководство libc для зарезервированных имен:

В дополнение к именам, описанным в этом руководстве, зарезервированные имена включают все внешние идентификаторы (глобальные функции и переменные), которые начните с символа подчеркивания ('_) и всех идентификаторов, независимо от использования которые начинаются с двух подчеркиваний или подчеркивания, за которыми следует Заглавная буква - это зарезервированные имена

Основная логика для этого соглашения об именах:

чтобы библиотеки и файлы заголовков могли определять функции, переменные, и макросы для внутренних целей без риска конфликта с именами в пользовательских программах

Также было бы полезно иметь возможность grep между "private" и "общедоступными" функциями (которые я помещал в кавычки, потому что пользователь может вызвать любую форму независимо от наименования).