¿Cómo puedo iterar por una secuencia de números definida por variables de bash?

¿Cómo puedo iterar por un rango numérico en un script de bash cuando el límite del rango está definido por el valor de una variable?

Según la documentación de Bash, es posible hacer esto:

for i in {1..5}; do echo $i; done

El resultado del script anterior sería:

1
2
3
4
5

Pero lo que yo quiero hacer es que los límites del rango se puedan definir mediante variables. He intentado lo siguiente pero no me funciona bien:

END=5
for i in {1..$END}; do echo $i; done

El script anterior muestra como resultado lo siguiente:

{1..5}
Estás leyendo una traducción autorizada de la pregunta How do I iterate over a range of numbers defined by variables in bash? planteada por eschercycle en StackOverflow.

Respuestas

#1

Lo más sencillo es utilizar el método seq:

for i in $(seq 1 $END); do echo $i; done

Si $END es un número muy grande, podrías optar por la siguiente solución alternativa que consume mucha menos memoria:

typeset -i i END # let's be explicit
for ((i=1;i<=END;++i)); do echo $i; done