Você não pode analisar opções com expressões regulares do jeito que você deseja, porque as opções não são passadas em uma string, mas em uma lista de strings. myscript --option foo bar -- qux
tem myscript
, --option
, foo
, bar
, --
e qux
como argumentos separados, nenhum deles contendo espaços em branco.
Um loop é o caminho a percorrer no bash.
case "$1" in
--option1)
shift
while [[ $# -ne 0 && "$1" != "--" ]]; do
option1_args+=("$1")
shift
done
(($# == 0)) || shift
done
Se o desempenho é um grande problema, você não deveria estar usando o bash. Experimente o ksh em vez disso - é gratuito, disponível em praticamente todos os lugares, mesmo que não seja instalado por padrão, e geralmente é significativamente mais rápido que o bash. Se ainda for muito lento, você precisa de uma linguagem de programação mais sofisticada, como Perl, Python ou Ruby.