Use o shift
incorporado. Primeiro, faça o% normalgetopts
para o seu script. Depois que esse loop for concluído,
shift "$((OPTIND - 1))"
mudará todas as opções já processadas.
A partir daí, você terá que concluir o processamento dos argumentos não opcionais, se houver, para a primeira parte do script (antes do --
). Depois de encontrar o --
, altere-o até que somente a última parte permaneça (a parte -d internalparam
que vem depois de --
). Uma maneira de fazer isso (usando a sintaxe bash
):
while [[ $# -gt 0 ]]; do
# process next argument
case $1 in
foo) # process foo
;;
--) shift; break;; # found '--', discard it and exit loop
*) # handle unrecognized argument
;;
esac
# not '--', so discard the argument and continue
shift
done
Finalmente, apenas o segundo conjunto de opções / argumentos permanece, o qual você pode passar. Do NÃO use $*
para passar os demais parâmetros para outro comando. Use "$@"
, que preserva a divisão original de palavras.
external_command "$@"