Fondamentalement, je veux "arracher" la première occurrence de -inf
la liste des paramètres. (Les paramètres restants seront transmis à une autre commande.)
Le script que j'ai a la structure suivante:
#!/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
Y at-il un bon moyen de le faire?
BTW, même si je suis principalement intéressé par les réponses applicables à /bin/sh
, je suis également intéressé par les réponses applicables uniquement à /bin/bash
.
Réponses:
POSIX:
Le code ci-dessus fonctionne même dans les shells pré-POSIX, à l'exception du shell Almquist d'origine (lire la note de fin ). Changez la
for
boucle en:garantie de travailler dans toutes les coquilles.
Un autre POSIX:
Avec celui - ci, vous devez retirer le premier
(
à(pattern)
le faire fonctionner dans des coquilles pré-POSIX.la source
$1
). Cette propriété m'a été utile dans ce que je fais. Aussi, merci de me rappeler que lein "$@";
bit en haut de lafor
boucle n'est pas nécessaire. C'est quelque chose que j'ai vu auparavant, mais j'ai tendance à l'oublier. En ce qui concerne votre remarque sur la coquille Almquist, ne l'do
ont à apparaître sur la ligne suivante, ou nefor arg; do
fonctionne aussi?for arg; do
travail dans la coquille d'Almquistfor arg do
est un idiome raccourci pourfor arg in "$@"; do
. Cela m'a jeté pendant environ 5 secondes! Certains pourraient dire que ce dernier est plus lisible :)J'ai trouvé cette question en essayant de résoudre un problème similaire, mais je voulais traiter tous les arguments sans option (ceux qui ne commencent pas par
-
) jusqu'à n'importe quel--
séparateur reçu . Je voulais extraire uniquement les arguments traités et laisser les autres en place dans l'ordre fourni.Voici ce que j'ai trouvé.
la source