Ответ 1
Я просмотрел справочную страницу bash и стандарт оболочки POSIX, но не смог найти что-либо относительно этого соглашения об именах. Тем не менее, используется символ подчеркивания для указания зарезервированных или внутренних имен в C. Чтобы процитировать руководство libc для зарезервированных имен:
В дополнение к именам, описанным в этом руководстве, зарезервированные имена включают все внешние идентификаторы (глобальные функции и переменные), которые начните с символа подчеркивания ('_) и всех идентификаторов, независимо от использования которые начинаются с двух подчеркиваний или подчеркивания, за которыми следует Заглавная буква - это зарезервированные имена
Основная логика для этого соглашения об именах:
чтобы библиотеки и файлы заголовков могли определять функции, переменные, и макросы для внутренних целей без риска конфликта с именами в пользовательских программах
Также было бы полезно иметь возможность grep между "private" и "общедоступными" функциями (которые я помещал в кавычки, потому что пользователь может вызвать любую форму независимо от наименования).