如何在bash中使用变量名生成for循环编号序列?

如何在bash中使用变量名生成for循环编号序列?,bash,for-loop,sequences,Bash,For Loop,Sequences,有人能解释一下我如何在bash for循环中使用变量名来生成一系列数字吗 for year in {1990..1997} do echo ${year} done 结果: 1990年 1991 1992 1993 1994 1995 1996 一九九七年 然而 year_start=1990 year_end=1997 for year in {${year_start}..${year_end}} do echo ${year} done 结果: {1990..1997} 我怎样

有人能解释一下我如何在bash for循环中使用变量名来生成一系列数字吗

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

1990年 1991 1992 1993 1994 1995 1996 一九九七年

然而

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

{1990..1997}

我怎样才能使第二个案例起作用?否则我就得写冗长的while循环。 非常感谢。

请尝试以下内容:

start=1990; end=1997; for year in $(seq $start $end); do echo $year; done

你可以用这样的东西

for (( year = ${year_start}; year <=${year_end}; year++ ))
do
  echo ${year}
done
请修改如下:

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


就个人而言,我更喜欢使用((year=${year\u start})的
;year@chepner想知道不使用反勾号的原因。它们会导致其他问题吗?
seq
命令已经过时,不建议用于
bash v3.x+
@Sithsu它们很难阅读,也很难嵌套。没有真正的理由使用它们来代替
$(…)
for year in $(eval echo "{$year_start..$year_end}")