C'est probablement une question boiteuse. Mais je reçois 3 arguments de la ligne de commande [script bash]. Ensuite, j'essaie de les utiliser dans une boucle for.
for i in {$1..$2}
do action1
done
Cela ne semble pas fonctionner et si $1
est "0"
et $2
est 2
il imprime {0..2}' and calls
action1` une seule fois. J'ai fait référence à divers exemples et cela semble être l'utilisation correcte. Quelqu'un peut-il me dire ce qui doit être corrigé ici?
Merci d'avance.
Que diriez-vous:
for i in $(eval echo {$1..$2}); do echo $i; done
Vous pouvez découper l'entrée à l'aide de ${@:3}
ou ${@:3:8}
puis bouclez dessus
Par exemple, pour imprimer des arguments à partir de 3
for i in ${@:3} ; do echo $i; done
ou pour imprimer 8 arguments à partir de 3 (donc, les arguments 3 à 10)
for i in ${@:3:8} ; do echo $i; done
Utilisez la variable $ @?
for i in $@
do
echo $i
done
Si vous souhaitez simplement utiliser les 1er et 2e arguments,
for i in $1 $2
Si vos $ 1 et $ 2 sont des entiers et que vous souhaitez créer une plage, utilisez la syntaxe C pour la boucle (bash)
for ((i=$1;i<=$2;i++))
do
...
done
J'avais un problème similaire. Je pense que le problème est de déréférencer $ 1 entre les accolades '{}'. L'alternative suivante a fonctionné pour moi ..
#!/bin/bash
for ((i=$1;i<=$2;i++))
do
...
done
J'espère que ça t'as aidé.
#/bin/bash
for i
do
echo Value: $i
done
Cela fera une boucle sur tous les arguments donnés au fichier de script. Remarque, pas de "do" ou autre chose après la variable de boucle i.