当我这样做时:
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
这是怎么回事?如何让它做我明确想要的事情,显然没有正确说明?
答案 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