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.