首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Shell脚本"for“循环语法

Shell脚本"for“循环语法
EN

Stack Overflow用户
提问于 2009-09-18 15:57:39
回答 8查看 926.1K关注 0票数 230

我已经让以下内容生效了:

代码语言:javascript
复制
for i in {2..10}
do
    echo "output: $i"
done

它会生成一系列的output: 2output: 3等代码行。

但是,尝试运行以下命令:

代码语言:javascript
复制
max=10
for i in {2..$max}
do
    echo "$i"
done

生成以下内容:

代码语言:javascript
复制
output: {2..10}

如何让编译器意识到它应该将$max视为数组的另一端,而不是字符串的一部分?

EN

回答 8

Stack Overflow用户

发布于 2009-09-18 16:18:30

试试for的算术表达式版本

代码语言:javascript
复制
max=10
for (( i=2; i <= $max; ++i ))
do
    echo "$i"
done

这在bash的大多数版本中都可用,并且还应该与Bourne shell (sh)兼容。

票数 81
EN

Stack Overflow用户

发布于 2009-09-18 16:01:20

如果seq命令在您的系统上可用:

代码语言:javascript
复制
for i in `seq 2 $max`
do
  echo "output: $i"
done

如果不是,那么在perl中使用可怜人的seq

代码语言:javascript
复制
seq=`perl -e "\$,=' ';print 2..$max"`
for i in $seq
do
  echo "output: $i"
done

注意那些引号。

票数 14
EN

Stack Overflow用户

发布于 2009-09-18 16:20:54

有不止一种方法可以做到这一点。

代码语言:javascript
复制
max=10
for i in `eval "echo {2..$max}"`
do
    echo "$i"
done
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1445452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档