Lembro-me de ter visto em algum lugar um bash
script usando case
e shift
para percorrer a lista de parâmetros posicionais, analisar sinalizadores e opções com argumentos quando os encontra e os remove após a análise para deixar apenas os argumentos simples, que são processados posteriormente pelo restante do roteiro.
Por exemplo, ao analisar a linha de comando cp -R file1 -t /mybackup file2 -f
, ele primeiro percorreria os parâmetros, reconheceria que o usuário solicitou a descida nos diretórios -R
, especificou o destino -t /mybackup
e forçou a cópia -f
e os remove da lista de parâmetros, deixando o programa para processar file1 file2
como os argumentos restantes.
Mas parece que não consigo me lembrar / descobrir o script que vi sempre. Eu só gostaria de poder fazer isso. Venho pesquisando em vários sites e anexo uma lista de páginas relevantes que examinei.
Uma pergunta neste site perguntou especificamente sobre "opções independentes de ordem", mas a resposta única e a resposta da pergunta para a qual foi enganada não considera casos como o acima, onde as opções são misturadas com argumentos normais, que eu presumo ser o razão para a pessoa mencionar especificamente opções independentes de pedidos .
Como bash
o built-in getopts
parece parar no primeiro argumento de não opção, ele não parece ser suficiente como solução. É por isso que a página do Wooledge BashFAQ (veja abaixo) explica como reorganizar os argumentos. Mas eu gostaria de evitar a criação de várias matrizes, caso a lista de argumentos seja bastante longa.
Como shift
não oferece suporte à exclusão de argumentos individuais no meio da lista de parâmetros, não tenho certeza de qual é uma maneira direta de implementar o que estou pedindo.
Gostaria de saber se alguém tem alguma solução para remover argumentos do meio da lista de parâmetros sem criar uma matriz totalmente nova.
Páginas que eu já vi:
- http://mywiki.wooledge.org/ComplexOptionParsing#Rearranging_arguments
- http://mywiki.wooledge.org/BashFAQ/035
- Usando getopts no script shell do bash para obter opções de linha de comando longas e curtas
- http://wiki.bash-hackers.org/scripting/posparams
- http://wiki.bash-hackers.org/howto/getopts_tutorial
- caso de argumento do bash para args em $ @
- Qual é a maneira canônica de implementar opções independentes de pedidos em scripts bash?
- Como lidar com opções em um script de shell?