complete
当选项中${COMPREPLY[@]}
包含字符时,我无法提供完整的建议:
。相反,它只提供所有建议共有的前缀。
这是一个运行良好的例子:
_foo()
{
local cur=${COMP_WORDS[$COMP_CWORD]}
COMPREPLY=( $(compgen -W "bart baze" -- "$cur" ) )
}
complete -F _foo foo
以下是它的使用方法(我从不按Enter,只TAB在指示的地方按)
$ foo <tab>
$ foo ba <-- Autocompletes common prefix, good
$ foo ba<tab>
bart baze <-- Suggests options, good
$ foo bar<tab>
$ foo bart <-- Autocompletes the only option, good
但是,如果我在前面添加一些内容:
,例如http://
,它就无法提供完整的建议(仅提供所有选项共有的前缀):
$ _foo()
{
local cur=${COMP_WORDS[$COMP_CWORD]}
COMPREPLY=( $(compgen -W "h:bart h:baze" -- "$cur" ) )
}
$ complete -F _foo foo
$ foo <tab>
$ foo h:ba <-- Autocompletes common prefix, good
$ foo h:ba<tab>
$ foo h:ba <-- No effect
该手册对-I
使用分隔符提出了一些建议,但complete -I -F _foo foo
并没有改变任何内容。
如果我深入检查,它似乎与如何complete -F
解释有关${COMPREPLY[@]}
。 compgen
似乎设置得COMPREPLY
很好。
$ COMPREPLY=( $(compgen -W "h:bart h:baze" -- h) )
$ for i in "${COMPREPLY[@]}"; do echo "$i"; done
h:bart
h:baze