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