6

谁能解释我如何在 bash for 循环中使用变量名来生成数字序列?

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

结果:

1990 1991 1992 1993 1994 1995 1996 1997

然而

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

结果:

{1990..1997}

我怎样才能使第二种情况起作用?否则我必须编写乏味的 while 循环。非常感谢。

4

2 回答 2

15

你可以使用这样的东西

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

seq命令已过时,最好避免使用。

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

如果你真的很想使用以下语法,

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

请修改如下:

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/

就个人而言,我更喜欢使用for (( year = ${year_start}; year <=${year_end}; year++ )).

于 2013-05-11T13:46:56.743 回答
4

尝试以下操作:

start=1990; end=1997; for year in $(seq $start $end); do echo $year; done
于 2013-05-11T13:28:20.620 回答