【问题标题】:How to generate for loop number sequence by using variable names in bash? [duplicate]如何在 bash 中使用变量名生成 for 循环编号序列? [复制]
【发布时间】:2013-05-06 00:54:23
【问题描述】:

谁能解释我如何在 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 循环。 非常感谢。

【问题讨论】:

    标签: bash for-loop sequences


    【解决方案1】:

    你可以使用这样的东西

    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 &lt;=${year_end}; year++ ))

    【讨论】:

      【解决方案2】:

      尝试以下操作:

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

      【讨论】:

      • @chepner 想知道不使用反引号的原因。它们会导致其他问题吗?
      • seq 命令已过时,不推荐用于bash v3.x+
      • @Sithsu 它们很难阅读,也很难嵌套。没有真正的理由使用它们来代替 $( ... )
      猜你喜欢
      • 2021-09-14
      • 2013-06-15
      • 1970-01-01
      • 2020-01-23
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 2019-04-29
      • 2016-01-14
      相关资源
      最近更新 更多