Básicamente, quiero "extraer" la primera aparición de -inf
la 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
for
ciclo 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 delfor
bucle es innecesario. Es algo que he visto antes, pero tiendo a olvidarlo. Con respecto a su comentario sobre el caparazón de Almquist, ¿do
tiene que aparecer en la siguiente línea, ofor arg; do
funcionaría también?for arg; do
trabajo en el caparazón de Almquistfor arg do
es 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