web-dev-qa-db-fra.com

Utilisation de la plage d'arguments de ligne de commande dans bash pour les parenthèses d'impression de boucle contenant les arguments

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 callsaction1` 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.

54
ru4mqart668op514

Que diriez-vous:

for i in $(eval echo {$1..$2}); do echo $i; done
64
zxt

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
72
Vijayender

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
17
kurumi

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é.

8
rthere
#/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.

0
Rolf Ø