I'm trying to learn how bash completion works, so that I can
write completion functions for some utilities.
As an experiment, I wrote the following trivial completion. It
is intended to report that the completions for the current word
are exactly the contents of the current word:
_test () {
COMPREPLY=(${COMP_WORDS[COMP_CWORD]})
}
complete -F _test test
I expected that, with the above, typing "test", followed by a
word, followed by <TAB>, would cause bash just to insert a space.
This is often what happens, but I've found some exceptions that I
do not yet understand. For example, consider the following:
test x=
When I press <TAB>, I expected this to expand to:
test x=
followed by a space.
With Debian's bash 4.1-3 (on which bash --version reports
"version 4.1.5(1)-release"), this actually expands as:
test x==
followed by a space.
With Debian's bash 3.2-4 ("bash 3.2.39(1)-release"), this expands
as:
test x=x=
followed by a space.
Can anyone explain to me what bash is doing here? I am trying to
write completion code for a utility that accepts some arguments
of the form "key1=value,key2=value,...", and this seemingly odd
behavior is making life difficult.
Thanks,
Ben.
--
Ben Pfaff
http://benpfaff.org