我有一个单词列表,这些单词应该按照完成某个键的出现顺序出现,但是 bash 似乎在内部对分配给COMPREPLY数组的内容进行排序。如何避免这种情况?
例子:
_comm() {
_init_completion -s -n : || return
case $prev in
-a) COMPREPLY=(zxy abcdef tyuu fgsfds)
;;
esac
}
complete -F _comm comm
Run Code Online (Sandbox Code Playgroud)
如果您运行此代码,bash 应该会完成
$ comm -a
Run Code Online (Sandbox Code Playgroud)
和
abcdef fgsfds tyuu zxy
Run Code Online (Sandbox Code Playgroud)
即按字母顺序排序。
小智 8
从 Bash 4.4 开始,您可以使用nosort选项。在您的示例中,将最后一行更改为
complete -o nosort -F _comm comm
Run Code Online (Sandbox Code Playgroud)
并且您应该在没有字母排序的情况下获得完成。
重要说明:选项(用 指定-o)必须在函数 ( -F)之前。这就是 coderofsalvation 的代码不起作用的原因。