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/ )


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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.