Search code examples
bashfor-loopsequences

How to generate for loop number sequence by using variable names in bash?


Could anybody explain how can I use variable names in bash for loop to generate a sequence of numbers?

for year in {1990..1997}
do
  echo ${year}
done

Results:

1990 1991 1992 1993 1994 1995 1996 1997

However

year_start=1990
year_end=1997
for year in {${year_start}..${year_end}}
do
  echo ${year}
done

Results:

{1990..1997}

How can I make the second case work? otherwise I have to write tedious while loops. Thanks very much.


Solution

  • You can use something like this

    for (( year = ${year_start}; year <=${year_end}; year++ ))
    do
      echo ${year}
    done
    

    seq command is outdated and best avoided.

    http://www.cyberciti.biz/faq/bash-for-loop/

    And if you want real bad to use the following syntax,

    for year in {${year_start}..${year_end}} 
    

    please modify it as follows:

    for year in $(eval echo "{$year_start..$year_end}")
    

    http://www.cyberciti.biz/faq/unix-linux-iterate-over-a-variable-range-of-numbers-in-bash/

    Personally, I prefer using for (( year = ${year_start}; year <=${year_end}; year++ )).