这显然是 bash-completion 的一个已知问题,并被列为 3.0 版本中要修复的目标。
但显然至少从 2012 年开始就是这样。
See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=666933 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=666933以供参考。
编辑:至少2011年:http://thread.gmane.org/gmane.comp.shells.bash.completion.devel/3652 http://thread.gmane.org/gmane.comp.shells.bash.completion.devel/3652
我根本不明白 nullglob 如何导致该电子邮件中列出的问题。
编辑:我现在明白发生了什么。问题是全局扩展是愚蠢的。它看到的是entire "word" $2[$j]=\${!ref}\${COMP_WORDS[i]}
作为一个单一的球体并尝试扩展它。通常情况下,这会失败,并且会被单独留下,但会nullglob
整个论点就消失了(从而导致了问题)。
快速测试表明替换它:
eval $2[$j]=\${!ref}\${COMP_WORDS[i]}
与以下任一:
eval $2\[$j\]=\${!ref}\${COMP_WORDS\[i\]}
or:
eval "$2[$j]=\${!ref}\${COMP_WORDS[i]}"
似乎解决了问题。但我不能保证其中任何一个都是完全正确的修复。
更新:这已经在 debian bash-completion git 存储库中修复了(以一种我没有想到的方式,但显然更好)。
这次提交 http://anonscm.debian.org/cgit/bash-completion/bash-completion.git/commit/bash_completion?id=732906b25096508fbc5d15d684dea0312ed7fca0修复它。还有其他与通配符相关的修复。
抓住__reassemble_comp_words_by_ref
从 git head 和 source 来看,在当前的基础上,似乎可以作为一种临时解决方法/解决方案来解决问题。