Bash para bucle con rango {# .. #}

17

El {# .. #} genera una secuencia de números o caracteres, de manera similar a range () en Python. Si ejecuto el comando echo {1..5}en la línea de comando que tengo:

1 2 3 4 5

En cambio, el siguiente script bash no funciona como se esperaba.

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

imprimirá:

Iteration {1..3}

¿Por qué?
* Podría usar seqpero leí que está desactualizado ( http://www.cyberciti.biz/faq/bash-for-loop/ )

Shake0
fuente
Este error ocurre si el script es ejecutado por el comando "sh" (intente usar "bash").
Shake0

Respuestas:

22

Probé su código (copie y pegue en un terminal) y produjo un resultado diferente al que publicó:

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

Estoy usando Linux Mint 12 Lisa (derivado de Ubuntu) con la versión bash 4.2.10 (1) -release

zipizap
fuente
2
¡Tienes razón! Pensé que sh y bash eran lo mismo ...
Shake0
1
no, bash y sh son bastante diferentes ... bash es más capaz que sh, se hizo sobre los hombros de sh :) aunque ambos tienen un buen grado de compatibilidad, también tienen sus diferencias
zipizap 12/12/2013
tenga en cuenta que puede hacer listas anidadas como para var en {{i..j}, {l..m}}; echo $ var; hecho si necesita una secuencia irregular como 1 2 3 7 8 9
marrón.2179
Tenga en cuenta que, en algunas distribuciones, /bin/shIS realmente apunta a bash, en Debian y Ubuntu, por lo general, apunta a /bin/dashque es compatible con POSIX, pero no admite la misma sintaxis que Bash.
dragon788