首页 > 解决方案 > bash for 循环中的意外循环行为

问题描述

为什么这段代码不执行 bash 中的 for 循环,而是打印它应该循环的内容?如何执行这样的 for 循环?

read N R 
for i in {0..$[(N-1)*R]..$R};do
echo $i;done

在此处输入图像描述 在此处输入图像描述

是的,代码看起来很糟糕,但它是为了最少数量的字符代码挑战。

标签: bashloopsfor-loopsyntax

解决方案


动态生成所需范围的一种想法:

read N R

for i in $(seq 0 ${R} $(( (N-1)*R )) )
do
    echo $i
done

并减少到最少的字符数:

read N R;for i in $(seq 0 $R $((N*R-R)));do echo $i;done

虽然,一般来说,我可能会选择类似的东西:

$ cat ezrah
read N R

for (( i=0 ; i<= (N-1)*R ; i=i+R ))
do
    echo $i
done

几个示例运行:

$ ezrah
3 4
0
4
8

$ ezrah
6 3
0
3
6
9
12
15

推荐阅读