禁用bash完成,但仅针对单个参数位置

禁用bash完成,但仅针对单个参数位置,bash,Bash,也许这是不可能的,因为我仅限于Bash3.2(MacOs附带),但我想在单个参数位置禁用完成,因为完成任何事情都没有意义,我不希望文件系统完成 通过在COMPREPLY中返回列表中的一个空字符串,我已经非常接近于此 _foo() { if [[ $COMP_CWORD == 1 ]] then COMPREPLY=("aaa") else COMPREPLY=("") fi retur

也许这是不可能的,因为我仅限于Bash3.2(MacOs附带),但我想在单个参数位置禁用完成,因为完成任何事情都没有意义,我不希望文件系统完成

通过在COMPREPLY中返回列表中的一个空字符串,我已经非常接近于此

_foo()
{
    if [[ $COMP_CWORD == 1 ]]
    then
        COMPREPLY=("aaa")
    else
        COMPREPLY=("")
    fi
    return 0;
}

complete -o default -F _foo foo
但每当我按TAB键时,光标就会向前移动一个空格。如果我提供一个空列表:

COMPREPLY=()

然后在我不想要的目录文件上完成。我想我可以接受这一点,但如果没有完成和光标移动那就太好了。

正如KamilCuk(谢谢)指出的那样,我复制粘贴了一些代码,包括
-o default
参数,以便在不了解其作用的情况下完成。正确的代码是:

_foo()
{
    if [[ $COMP_CWORD == 1 ]]
    then
        COMPREPLY=("aaa")
    else
        COMPREPLY=()
    fi
    return 0;
}

complete -F _foo foo

所以
COMPREPLY=()
。您正在返回一个空字符串,因此它正在完成一个空字符串。不返回字符串。@KamilCuk是的,您可能会想到,但您尝试过了吗?(使用Bash 3)。删除
-o默认值
。您是否阅读了
-o default
的功能:p<代码>然后在我不想要的目录文件上完成。
然后不
-o默认值
。您还可以使用
shopt-u default
将其删除。顺便说一句,你可以做
COMPREPLY=(“”);shopt-snospace
但那可不太好。哦,天哪!当你指出这一点时,这是显而易见的。我或许应该删除这个问题,你认为它有用吗?我现在不太确定。我想你可以发布一个答案并接受它;)