![为什么没有人使用 Bash 补全函数可用的位置参数?](https://linux22.com/image/113625/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%B2%A1%E6%9C%89%E4%BA%BA%E4%BD%BF%E7%94%A8%20Bash%20%E8%A1%A5%E5%85%A8%E5%87%BD%E6%95%B0%E5%8F%AF%E7%94%A8%E7%9A%84%E4%BD%8D%E7%BD%AE%E5%8F%82%E6%95%B0%EF%BC%9F%20.png)
Bash 手册页描述了可用于完成 shell 函数的参数:
如果调用 shell 函数,还会设置 COMP_WORDS 和 COMP_CWORD 变量。
使用这些参数来识别当前单词和前一个单词似乎是一个常见的习惯用法:
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
但文件继续说,
当调用函数或命令时,第一个参数是正在完成其参数的命令的名称,第二个参数是正在完成的单词,第三个参数是当前命令行上正在完成的单词之前的单词。
所以上面的代码可以替换为,
cur=$2
prev=$3
我还没有看到任何“在野外”使用这种用法的例子。这是为什么?人们只是不知道这些参数已经可用,还是有令人信服的理由不依赖它们?
我意识到 bash-completion 项目中提供了更细致的完成机制(v1, v2),所以前面的例子对于高级用例来说都不是理想的,但是对于简单的用例来说,位置参数是开箱即用的,那么为什么没有人使用它们呢?