Eu acho que o melhor caminho a seguir é usar -s para cada argumento, ou seja, -s foo -s bar -s baz
, mas se você ainda quiser suportar vários argumentos para uma única opção, sugiro que você < strong> not use getopts
.
Por favor, dê uma olhada no seguinte script:
#!/bin/bash
declare -a sargs=()
read_s_args()
{
while (($#)) && [[ $1 != -* ]]; do sargs+=("$1"); shift; done
}
while (($#)); do
case "$1" in
-s) read_s_args "${@:2}"
esac
shift
done
printf '<%s>' "${sargs[@]}"
Quando -s
está sendo detectado, read_s_args
é chamado com as opções e argumentos restantes na linha de comando. read_s_args
lê seus argumentos até atingir a próxima opção. Argumentos válidos para -s estão sendo armazenados na matriz sargs
.
Aqui está uma saída de amostra :
[rany$] ./script -s foo bar baz -u a b c -s foo1 -j e f g
<foo> <bar> <baz> <foo1>
[rany$]