Você pode usar o seguinte código (substituí suas opções por foo:baz foo:qux bar:eat bar:egg
para esclarecer):
function _command_opt()
{
local cur cursec command opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
cursec='echo ${cur} | awk -F ':' '{print $1}'';
command="${COMP_WORDS[1]}"
opts="foo bar"
case "${command}" in
foo)
COMPREPLY=( $(compgen -W "baz qux" -- ${cursec}) ); return 0;;
bar)
COMPREPLY=( $(compgen -W "eat egg" -- ${cursec}) ); return 0;;
*) ;;
esac
COMPREPLY=( $(compgen -W "${opts}" -S ":" -- ${cur}) ); compopt -o nospace;
}
complete -F _command_opt -o bashdefault -o default 'command'
Quando você digitar command [tab]
, poderá obter a lista de primeiros níveis foo: bar:
e, quando digitar f[tab][tab]
, obterá a lista de conclusão do segundo nível baz qux
. Em seguida, você pode digitar q[tab]
para obter a linha de comando completa command foo:qux
.
Espero que ajude.