Bash pour boucle avec plage {# .. #}


17

Le {# .. #} génère une séquence de nombres ou de caractères, de la même manière que range () en Python. Si j'exécute la commande echo {1..5}dans la ligne de commande, j'ai:

1 2 3 4 5

Au lieu de cela, le script bash suivant ne fonctionne pas comme prévu.

for i in {1..3};
do
    echo "Iteration $i"
done

imprimera:

Iteration {1..3}

Pourquoi?
* Je pourrais utiliser seqmais j'ai lu que c'est dépassé ( http://www.cyberciti.biz/faq/bash-for-loop/ )


Cette erreur se produit si le script est exécuté par la commande "sh" (essayez d'utiliser "bash").
Shake0

Réponses:


22

J'ai essayé votre code (copier-coller dans un terminal) et il a produit un résultat différent de ce que vous avez publié:

for i in {1..3};
do
    echo "Iteration $i"
done
#---OUTPUT BELOW---
Iteration 1
Iteration 2
Iteration 3

J'utilise Linux Mint 12 Lisa (dérivée d'Ubuntu) avec la version bash 4.2.10 (1) -release


2
Tu as raison! Je pensais que sh et bash étaient la même chose ..
Shake0

1
non, bash et sh sont assez différents ... bash est plus capable que sh, il a été fait sur les épaules de sh :) bien qu'ils aient tous les deux un bon degré de compatibilité, ils ont aussi ses différences
zipizap

notez que vous pouvez faire des listes imbriquées comme pour var dans {{i..j}, {l..m}}; faire echo $ var; fait si vous avez besoin d'une séquence irrégulière comme 1 2 3 7 8 9
brown.2179

Notez que sur certaines distributions, il /bin/shpointe en fait vers bash, sur Debian et Ubuntu, il pointe généralement vers /bin/dashce qui est principalement conforme à POSIX mais ne prend pas en charge la même syntaxe que Bash.
dragon788
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.