bash for循环问题

时间:2011-04-19 22:15:31

标签: bash

  

可能重复:
  How do I iterate over a range of numbers in bash?

当我这样做时:

RANGE_COUNT=28
for i in {0..$RANGE_COUNT} ; do     echo $i; done

我明白了

{0..28}

当我这样做时:

for i in {0..5} ; do     echo $i; done

我明白了:

0
1
2
3
4
5

这是怎么回事?如何让它做我明确想要的事情,显然没有正确说明?

3 个答案:

答案 0 :(得分:4)

你可以使用c style for loop

for((i=1;i<=$RANGE_COUNT;i++))
do
  ...
done

或使用eval

for i in $(eval echo {0..$RANGE_COUNT}); do echo $i; done

其他方法包括while循环

i=0
while [ "$i" -le "$RANGE_COUNT" ]; do echo $i; ((i++)); done

答案 1 :(得分:3)

来自 man bash

  

之前进行了支撑扩展   任何其他扩展,以及任何其他扩展   其他特殊字符   扩展保留在   结果。这是严格的文字。巴什   不适用任何句法   解释的背景   扩展或文本之间   括号。

所以,在参数扩展之前,这是一个纯粹的文本宏扩展。

Shell是宏处理器和更正式的编程语言之间高度优化的混合。为了优化典型的使用案例,我们做出了各种妥协;有时语言会变得更复杂,有时会受到限制。

答案 2 :(得分:1)

使用算术符号:

for ((i=0; i<$RANGE_COUNT; i++)); do echo $i; done