使用TAB键根据输入的字符自动补全路径名、文件名和可执行程序。自动补全依赖于/etc/bash_completion.d/路径下创建的bash-completionfor自动补全脚本。实现简单的参数自动补全自动补全的实现依赖于compgen和complete命令以及bash内置的补全变量。我们先看下面的脚本:#脚本1:vtb.bash_vtb(){localcur=${COMP_WORDS[COMP_CWORD]}COMPREPLY=($(compgen-W"meaaquaalice"--$cur))}complete-F_vtbvtbgrantexecutionpermissionandtest:>chmod+xvtb.bash>sourcevtb.bash>vtbaliceaquamea>vtbaaliceaqua现在vtb命令有函数了参数补全,不难发现它给出的选项来自于_vtb函数中的COMPREPLY数组。自动补全的原理内置的补全变量表变量名函数COMP_WORDS类型是一个数组,存储了当前命令行输入的所有单词。完整结果COMP_WORDBREAKS类型为字符串,表示单词之间的分隔符COMP_LINE类型为字符串,表示当前命令行输入字符COMP_POINT类型为整数,表示光标在当前命令行的位置理解脚本1中的compgen-W在_vtb函数中,我们首先定义cur变量,获取当前光标所在位置的单词,并将其作为参数传递给compgen-W命令。该命令接受两个参数,定义和使用如下:command不会输出功能是完成候选词的筛选。-W方式表示从中获取候选词,然后通过参数过滤候选词。最后,我们将过滤后的结果存储在COMPREPLY数组中。理解complete-F我们在脚本1中使用了complete命令的-F方式,使vtb命令能够在_vtb函数中COMPREPLY获取候选补全结果,其本质是完成候选词的绑定。下面以简单的-W模式为例进行说明。它的定义和用法如下:#complete-W>complete-W"aaabcd"test_comp>test_compaaabthecd>test_compaaaabcomplete命令可以将候选词列表绑定到,根据不同的命令模式(-F-W-C-G),有不同的构建候选词列表的方法。-W模式通过字符串构建候选词列表,而-F模式需要使用COMPREPLY来构建候选词列表。其定义和用法如下:complete-F#绑定候选词列表#过滤候选词列表该命令可以实现的绑定func_name>和,函数必须通过COMPREPLY构造候选词列表,是否使用compgen或者其他方式对候选词进行过滤取决于业务逻辑。与其他模式相比,-F模式可以提供更灵活的自动补全策略。以脚本1为例,我们通过compgen、complete和内置补全变量的组合实现了类似-W模式的功能。