Что делает _expand?

Я работал с оболочкой, и по ошибке я автоматически заполнил вкладку после записи _e, что привело к _expand,

Что делает эта команда? Я не мог найти объяснение в Интернете, единственные ссылки, которые я мог найти здесь на Ask Ubuntu, были:

Но они не отвечают на мой вопрос. Вместо этого они открывают больше вопросов того же рода о командах, таких как _complete, _complete_as_root, так далее.

1 ответ

Решение

Вы можете узнать, что _expand делает, когда печатать

$ type _expand
_expand is a function
_expand ()
{
    if [[ "$cur" == \~*/* ]]; then
        eval cur=$cur;
    else
        if [[ "$cur" == \~* ]]; then
            cur=${cur#\~};
            COMPREPLY=($( compgen -P '~' -u "$cur" ));
            [ ${#COMPREPLY[@]} -eq 1 ] && eval COMPREPLY[0]=${COMPREPLY[0]};
            return ${#COMPREPLY[@]};
        fi;
    fi
}

Это функция в механизме завершения bash. Расширяет тильды (~) в путевых именах. В /etc/bash_completion комментарий о функции:

# Expand ~username type directory specifications.  We want to expand
# ~foo/... to /home/foo/... to avoid problems when $cur starting with
# a tilde is fed to commands and ending up quoted instead of expanded.

Попробуйте в терминале, наберите:

~<tab><tab>

Это расширится до имени пользователя, например

~usera     ~userb     ~userc
Другие вопросы по тегам