Básicamente, quiero "extraer" la primera aparición de -infla lista de parámetros. (Los parámetros restantes se pasarán a un comando diferente).
El script que tengo tiene la siguiente estructura:
#!/bin/sh
<CODE>
for POSITIONAL_PARAM in "$@"
do
<CODE>
if [ "$POSITIONAL_PARAM" = '-inf' ]
then
<PLUCK $POSITIONAL_PARAM FROM $@>
break
fi
<CODE>
done
<CODE>
some-other-command "$@"
# end of script
¿Existe una forma correcta de hacer esto?
Por cierto, aunque estoy interesado principalmente en respuestas aplicables a /bin/sh, también estoy interesado en respuestas aplicables solo a /bin/bash.

Respuestas:
POSIXY:
El código anterior incluso funciona en shells anteriores a POSIX, excepto el shell original de Almquist (Lea la nota final ). Cambia el
forciclo a:Garantía para trabajar en todos los depósitos.
Otro POSIX:
Con éste, es necesario eliminar la primera
(en(pattern)hacer que funcione en las conchas de pre-POSIX.fuente
$1). Esta propiedad fue útil en lo que estoy haciendo. Además, gracias por recordarme que elin "$@";bit en la parte superior delforbucle es innecesario. Es algo que he visto antes, pero tiendo a olvidarlo. Con respecto a su comentario sobre el caparazón de Almquist, ¿dotiene que aparecer en la siguiente línea, ofor arg; dofuncionaría también?for arg; dotrabajo en el caparazón de Almquistfor arg does un lenguaje abreviado parafor arg in "$@"; do. ¡Eso me arrojó por unos 5 segundos! Algunos podrían decir que este último es más legible :)Encontré esta pregunta al intentar resolver un problema similar, sin embargo, quería procesar todos los argumentos que no son de opción (aquellos que no comienzan con
-) hasta cualquier--separador recibido . Solo quería extraer los argumentos procesados y dejar los restantes in situ en el orden proporcionado.Esto es lo que se me ocurrió.
fuente