为什么即使使用“nosort”,“complete”也会对选项进行排序?

为什么即使使用“nosort”,“complete”也会对选项进行排序?

我无法得到这个答案在 Bash 4.4.20 中工作(Ubuntu 18.04 中的默认 shell):

$ complete -o nosort -W '--color=auto --color=always --color=never' mycommand
$ mycommand --<Tab>
--color=always  --color=auto    --color=never   

COMPREPLY在函数中设置会得到相同的结果:

_mycommand() {
    COMPREPLY=($(compgen -W '--color=auto --color=always --color=never' -- "${COMP_WORDS[1]}"))
}

complete -o nosort -F _mycommand mycommand

man bash提到了这个nosort选项,所以应该支持它。是什么赋予了?

答案1

看起来这是由completion-ignore-case

$ bind "set completion-ignore-case off"
$ bind -V | grep ignore-case
completion-ignore-case is set to `off'
$ complete -o nosort -W '--color=auto --color=always --color=never' mycommand
$ mycommand --<Tab>
--color=auto    --color=always  --color=never   

看起来 Bash 4.4.20 中没有该修复。

相关内容