Bash完成函数:通过glob限制匹配

时间:2016-11-27 02:07:04

标签: bash bash-completion

使用compgen的Bash完成功能可以使用当前部分完成的单词。如何将匹配限制为与特定文件glob匹配的匹配?

-G 'fooglob'选项不会这样做;它忽略当前单词并且无条件地匹配glob。

我想要的是:

compgen -A file -FOO '*.yaml' -- "$cur"

并且生成的选项仅包含与 当前单词指定的glob匹配的选项。那么假设的-FOO选项是什么?

(请注意,这是一个专门用Bash编程语言编写函数的问题,这就是它适用于StackOverflow的原因。)

1 个答案:

答案 0 :(得分:1)

试试这个:

compgen -A file -X '!*.yaml' -- "$cur"

根据Programmable Completion Builtins上的Bash参考手册部分:

  

完整   [...]

     

-X filterpat

     

filterpat 是用于文件名扩展的模式。     它适用于前面生成的可能完成列表     选项和参数,以及每个完成匹配 filterpat     从列表中删除。 filterpat 中的前导!否定了该模式;     在这种情况下,任何与 filterpat 不匹配的完成都将被删除。

compgen命令尊重complete的大多数选项,包括上面记录的选项。)