_expand有什么作用?


12

我当时正在使用外壳程序,但tab写完后错误地自动完成了工作_e,结果是_expand

该命令的作用是什么?我在网上找不到解释,我在Ask Ubuntu上只能找到以下参考:

但是他们没有回答我的问题。相反,他们开辟的同类更有人对类似这样的命令_complete_complete_as_root等等。

Answers:


14

您可以_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

1
谢谢,我不知道命令type。我不清楚为什么我不能将这些函数称为_function_name [argument],但是现在我知道它们充当自动完成扩展的目的,而它们出现在我的自动完成中的事实仅仅是因为它们是声明的(但它们并不意味着直接调用)。
scristalli

3
_expand与所有其他完整函数一样,该函数正是COMPREPLY根据$cur包含完成模式的值来操纵数组。
混乱
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.