2012-02-24 4 views
0

Je suis en train de faire quelque chose comme ça dans shellscript:Pour Liste de boucle dans shellscript

STEP=5 
LIST=[1-$STEP] 

for i in $LIST 
    echo $i 
done 

La sortie je pense est:

1 2 3 4 5 

Je l'ai probablement vu cet usage avant (par exemple [AZ ]) mais je ne me souviens pas de la syntaxe correcte. Merci de votre aide!

+0

Comme cela peut-être: http://stackoverflow.com/questions/169511/how-do -i-iterate-over-a-range-of-numbers-in-bash – minopret

Répondre

1

Essayez ceci. Notez que vous utilisez la commande echo qui inclut un LF. Utilisez echo -n pour obtenir une sortie sur la même ligne comme indiqué

STEP=5 
for i in `seq 1 $STEP`; do 

echo $i 

done 
+0

Notez que 'seq' n'est pas un utilitaire POSIX et peut ne pas être disponible. 'echo -n' ne devrait jamais être utilisé; utilisez 'printf' à la place, qui peut remplacer de manière portable le retour à la ligne. – Jens

0

À supposer que c'est bash:

$ echo {1..5} 
1 2 3 4 5 
$ STEP=5 
$ echo {1..$STEP} 
{1..5} 
$ eval echo {1..$STEP} 
1 2 3 4 5 
+1

Ceci est génial jusqu'à ce que vous l'exécutiez dans un répertoire où il y a un fichier nommé "1" parce que certains bonehead typo'd une redirection. Ensuite, le {1..5} s'étend à "1" et vous passez * heures * à essayer de diagnostiquer le problème. :) Sauf si vous utilisez noglob parce que vous avez déjà fait cela et que vous ne voulez plus jamais avoir ce problème. – dannysauer

+0

@dannysauer L'expansion de l'accolade n'est pas un regroupement de noms de fichiers. 'echo {1..5}' renvoie '1 2 3 4 5' si un fichier nommé' 1' est présent ou non. Confondez-vous ceci avec 'echo [1-5]'? – Jens

+0

@dannysauer, vérifiez par vous-même: la séquence bash des expansions est documentée: http://www.gnu.org/software/bash/manual/bashref.html#Shell-Expansions –