Je risquerai de supposer que le vote défavorable était dû au fait que votre réponse était générique à «sh», et non spécifique à «bash». L'approche pure Bash {begin end step} fonctionne juste un peu mieux. L'ancienne méthode 'seq' est pratique sur les systèmes de mémoire plus anciens ou plus petits comme busybox. J'ai voté à la fois pour votre réponse et celle de TheBonsai. :)
Scott Prive
6
Préférez $ (...) aux contre-citations. Les contre-citations ne s'imbriquent pas correctement.
Omnifarious
seq 1000000 1000010 ne fait que des flottants, en fait - il n'y a aucun moyen de lui faire faire des entiers! L'expansion des accolades fonctionne.
hmijail pleure les démissionnaires le
112
L'expansion des accolades de Bash 4 a une fonction d'étape:
for{0..10..2};do..done
Peu importe si Bash 2/3 (C-style for loop, voir les réponses ci-dessus) ou Bash 4, je préférerais n'importe quoi à la commande 'seq'.
et btw, savez-vous si bash4 est par défaut sur n'importe quel système d'exploitation majeur?
SilentGhost
3
Bash4 n'est toujours pas grand public, non. Pourquoi pas seq? Eh bien, disons-le avec les mots du bot dans le canal IRC #bash: "seq (1) est une commande externe hautement non standard utilisée pour compter jusqu'à 10 dans des howtos Linux idiots."
TheBonsai
je crois comprendre que seq fait partie des coreutils. qu'est-ce qui n'est pas standard à ce sujet? arguments? Merci de votre aide.
SilentGhost
4
Ces arguments peuvent ou non compter pour vous: * il y a suffisamment de systèmes sans GNU coreutils (mais Bash est installé) * vous créez un processus externe inutile * vous vous fiez à l'idée que tous les 'seq' font ce que votre 'seq' fait * c'est non normalisé par l'ISO
TheBonsai
3
@becko Si l'étape est stockée dans la variable i, vous ne pouvez pas le faire for {0..10..${i}}.. elle échoue.
+1 Parce que le pas peut également être remplacé par une variable.
Nehal J Wani
1
Je pense que c'est vraiment ce que la plupart des gens veulent probablement - un moyen simple de faire une boucle avec une valeur de pas prescrite. Cela semble plus simple que toutes les réponses basées sur seq, et c'est une syntaxe plus claire que l'expansion d'accolades Bash4, et on dirait que cela permettrait des variables (je n'ai pas essayé cela, mais la syntaxe le suggère définitivement).
tobylaroni
Fonctionne dans Bash 3, contrairement à la réponse de @ TheBonsai.
srcerer
Il résout même la variable, ((i = "$ first"; i <= "$ last"; i + = "$ step")). Pas si facile avec les accolades et seq.
Blaa_Thor
20
#!/bin/bashfor i in $(seq 1210)do
echo "skip by 2 value $i"done
Réponses:
je ferais
(bien sûr
seq 0 2 10
produira le même résultat tout seul).Notez que
seq
permet les nombres à virgule flottante (par exemple,seq .5 .25 3.5
) mais l'expansion d'accolades de bash n'autorise que les entiers.la source
L'expansion des accolades de Bash 4 a une fonction d'étape:
Peu importe si Bash 2/3 (C-style for loop, voir les réponses ci-dessus) ou Bash 4, je préférerais n'importe quoi à la commande 'seq'.
la source
i
, vous ne pouvez pas le fairefor {0..10..${i}}
.. elle échoue.Pure Bash, sans processus supplémentaire:
la source
la source
la source