processando argumentos com a função bash

0

Eu tenho um script bash que é iniciado com argumentos, eu tenho uma função para processar argumentos. Eu coloco os argumentos em uma matriz args=("$@") . e eu tenho uma função que pode verificar se o argumento contém certos elementos.

containsElement () {
  local e
  for e in "${@:2}"; do [[ "$e" == "$1" ]] && { ipos="$i"; return 0; }
  done
  return 1
}

Eu queria melhorar minha função com a habilidade que; Depois de encontrar o argumento, verifique os argumentos próximos e veja se eles contêm números até que o próximo elemento não numérico na matriz seja encontrado , coloque-os em uma matriz de opt [1] , opte [2], ... É melhor explicado em um exemplo;

sh script.sh plt 2 3 g40 All 32

então eu quero que a função me dê

if containsElement "plt" "${args[@]}" ; then
containsElement "plt" "${args[@]}"
echo ${opt[@]}
fi

me dê

2 3 g40

O número são opções para cada argumento. Eu posso escrever algo para fazer isso, mas se transforma em um código feio, eu queria aprender uma maneira legal de fazer isso.

    
por Raymond Ghaffarian Shirazi 06.10.2015 / 21:46

1 resposta

0

Eu faço isso com regexes, por exemplo:

echo plt 2 3 g40 All 32|perl -ne's/(\w+) ([\d ]+)(\w+)/print "$1$2$3\n"/egx;'

plt 2 3 g40
All 32

Não tenho certeza se é o que você está procurando? Você pode omitir a impressão da primeira string para cada grupo de parâmetros, com:

echo plt 2 3 g40 All 32|perl -ne's/(\w+) ([\d ]+)(\w+)/print "$2$3\n"/egx;'
    
por rugdog 06.10.2015 / 23:01