$OPTIND
indica o quanto você progrediu ao analisar a lista de parâmetros (por exemplo, para opções), enquanto $#
é simplesmente o número de parâmetros. Eles não estão realmente relacionados, porque $OPTIND
muda, enquanto $#
não (a menos que você use shift
).
A descrição POSIX de getopts
entra em detalhes.