Decalage des variables positionnelles
Résolu
Jo
-
Jo -
Jo -
Bonjour à tous ,
Je suis face à un problème tout bête que je n'arrive pas à résoudre.
Je voudrais que les paramètres de la méthode hello soient lus deux par deux.
Lorsque j'exécute le code avec quartes arguments, j'obtiens $#=4 $#=2 $#=0 mais je ne sors jamais de la boucle
Je suis face à un problème tout bête que je n'arrive pas à résoudre.
Je voudrais que les paramètres de la méthode hello soient lus deux par deux.
hello(){
while [ $# -gt 0 ];do
SearchName "$1" "$2"
cp toto.html tata.html
echo "$#"
shift 2
done
}
while test $# -ne 0; do case "$1" in -a) hello "$@" esac done
Lorsque j'exécute le code avec quartes arguments, j'obtiens $#=4 $#=2 $#=0 mais je ne sors jamais de la boucle
5 réponses
-
salut,
Il doit y avoir un shift pour la boucle while principale.
Seuls les paramètres passés à la fonction sont décalés.
Edit: il devrait n'y avoir de shift *que* dans la boucle principale.
et passer seulement $1 et $2 à la fonction. -
J'ai mis un shift dans la boucle while peut etre que tu parles de celle de case/esac
Je ne comprends pas lorsque tu dis passer seulement $1 et $2 à la fonction"
la fonction hello doit prendre 2 ,4 ou 6 arguments. -
En fait, je ne vois pas vraiment d'intérêt à la boucle while principale (case n'initie pas une boucle). Peut-être un simple test suffirait.
Il faudrait que tu nous en dises davantage sur ce que doit faire ton script. -
En fait , je fais un case /esac pour appeler différentes méthodes.
Ma méthode hello prend n arguments ; puis appelle la méthode SearchName qui a besoin de deux arguments $1 $2 et génère un fichier.
Je voudrais pouvoir générer plusieurs fichiers en utilisant $1 et $2 , puis décaler les arguments pour recommencer .
Plutot que un while ,il faut faire un if comme ca : ?if [ $# -ne 0 ];then SearchName "$1" "$2" cp toto.html tata.html echo "$#" shift 2 fi } -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Ah , c'est bon j'ai trouvé pourquoi je bouclais en infini dans la boucle while .
Il fallait mettre un $* derrière -a hello $@ ; shift $#;;
hello(){ while [ $# -gt 0 ];do SearchName "$1" "$2" cp toto.html tata.html shift 2 done } while test $# -ne 0; do case "$1" in -a) hello $@;shift $# ;; esac done