Ключевое слово "have" для завершения bash

Является ли have ключевым словом в bash? Или скрипты завершения bash используют язык, который не является bash?

have gcc &&
_gcc()
{

Это обычное явление. См.: grep "have .* &&" /etc/bash_completion.d/*

Я не смог найти какую-либо информацию о учебниках по завершению bash, которые я видел, и я не мог найти никакой информации в man bash. Это также трудно для Google "иметь". Где я могу найти документацию по этому вопросу?

Я предполагаю, что это связано с тем, что существует gcc в PATH?

изменить: да. /etc/bash_completion содержит:

have()
{
    unset -v have
    # Completions for system administrator commands are installed as well in
    # case completion is attempted via `sudo command ...'.
    PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin type $1 &>/dev/null &&
    have="yes"
}

Ответ 1

have и _have - это всего лишь две функции, определенные в базовом файле bash_completion. Между ними они образуют оболочку вокруг встроенной команды type, чтобы определить, доступна ли какая-либо конкретная команда/программа.

# This function checks whether we have a given program on the system.
#
_have()
{
    # Completions for system administrator commands are installed as well in
    # case completion is attempted via `sudo command ...'.
    PATH=$PATH:/usr/sbin:/sbin:/usr/local/sbin type $1 &>/dev/null
}

# Backwards compatibility for compat completions that use have().
# @deprecated should no longer be used; generally not needed with dynamically
#             loaded completions, and _have is suitable for runtime use.
have()
{
    unset -v have
    _have $1 && have=yes
}