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

16,424

Solution 1

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++ )).

Solution 2

Try following:

start=1990; end=1997; for year in $(seq $start $end); do echo $year; done
Share:
16,424
wiswit
Author by

wiswit

Updated on June 06, 2022

Comments

  • wiswit
    wiswit almost 2 years

    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.

  • Sithsu
    Sithsu almost 11 years
    @chepner Would like to know the reason for not using backticks. Could they cause other problems?
  • Bill
    Bill almost 11 years
    seq command is outdated, and not recommended for bash v3.x+
  • chepner
    chepner almost 11 years
    @Sithsu They're hard to read, and hard to nest. There's no real reason to use them in place of $( ... ).