Bash_completion

The Ruby gem completely makes it simple to create bash completion scripts.

Suppose we have the executable kaka.
Arguments syntax is: kaka [--verbose] [--dir <directory>] <file>

First create completely.yaml

kaka:
- --verbose
- --dir
- <file>
kaka*--dir:
- <directory>

Then run completely generate

This creates completely.bash

Now you can source it..

source completely.bash

..or move it to your bash_completion directory (path might vary).

mv completely.bash ~/.local/share/bash-completion/completions/kaka.bash

Now you can tab-complete your command.

UPDATE:
not sure if <file> (or <directory>) can use globbing.
so I use $(compgen -f -G '*.zip') or $(compgen -d -G '[A-Z]*')