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
Author by
wiswit
Updated on June 06, 2022Comments
-
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 almost 11 years@chepner Would like to know the reason for not using backticks. Could they cause other problems?
-
Bill almost 11 years
seq
command is outdated, and not recommended forbash v3.x+
-
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
$( ... )
.