Recuerdo haber visto en alguna parte una bash
secuencia de comandos que usa case
y shift
recorre la lista de parámetros posicionales, analiza indicadores y opciones con argumentos cuando los encuentra, y los elimina después del análisis para dejar solo los argumentos desnudos, que luego son procesados por el resto del guión.
Por ejemplo, al analizar la línea de comando de cp -R file1 -t /mybackup file2 -f
, primero caminaría a través de los parámetros, reconocería que el usuario ha solicitado descender a directorios por -R
, especificó el objetivo por -t /mybackup
y para forzar la copia -f
y eliminará de la lista de parámetros, dejando el programa a procesar file1 file2
como los argumentos restantes.
Pero parece que no puedo recordar / descubrir el guión que vi cada vez. Solo me gustaría poder hacer eso. He estado buscando en varios sitios y agrego una lista de páginas relevantes que examiné.
Una pregunta en este sitio web preguntó específicamente sobre "opciones independientes del orden", pero tanto la respuesta única como la respuesta a la pregunta a la que fue duplicada no considera casos como el anterior donde las opciones se mezclan con argumentos normales, lo que supongo que fue razón para que la persona mencione específicamente opciones independientes del pedido .
Como bash
la función incorporada getopts
parece detenerse en el primer argumento sin opción, no parece ser suficiente como solución. Es por eso que la página de Wooledge BashFAQ (ver más abajo) explica cómo reorganizar los argumentos. Pero me gustaría evitar crear múltiples matrices en caso de que la lista de argumentos sea bastante larga.
Dado shift
que no admite la aparición de argumentos individuales en el medio de la lista de parámetros, no estoy seguro de cuál es una forma directa de implementar lo que estoy preguntando.
Me gustaría saber si alguien tiene alguna solución para eliminar argumentos del medio de la lista de parámetros sin crear una matriz completamente nueva.
Páginas que ya he visto:
- http://mywiki.wooledge.org/ComplexOptionParsing#Rearranging_arguments
- http://mywiki.wooledge.org/BashFAQ/035
- Uso de getopts en el script de shell bash para obtener opciones de línea de comando largas y cortas
- http://wiki.bash-hackers.org/scripting/posparams
- http://wiki.bash-hackers.org/howto/getopts_tutorial
- argumento de bash para argumentos en $ @
- ¿Cuál es la forma canónica de implementar opciones independientes del orden en los scripts de bash?
- ¿Cómo manejo los interruptores en un script de shell?