0

我正在尝试编写一段代码来显示如下内容:

1

1 51

1 51 101

1 51 101 151

...

z1=1

for i in {1..4}
do 
j="$(($i + 1))"
z$j="$((z$i)) $((1 + $((i*50))))"
echo -e "\nz$j"
done

然而,这就是我最终的结果:

z1=1: command not found
z2=1 51: command not found
z2
z3=0 101: command not found
z3
z4=0 151: command not found
z4

z2 很好,但以下都不是。

如果我写echo -e "\"$((z$j))"",我最终会为每个循环得到 0 而不是 z 的东西。

我找不到我做错了什么?

4

3 回答 3

3

您可以使用seq来生成序列:

for i in {1..10} ; do
    seq -s ' ' 1 50 $((1+i*50))
done
于 2013-03-05T00:12:28.793 回答
1

您的错误是您无法就地计算变量名称。

sh 命令myVar=myVal评估值(右侧)但不评估左侧。将你的临时变量名放入一个变量中,然后${!myVarName}用来提取它。

varName="z$i"
${!varName}="whatever"

不要忘记保存您的 oldVarName 以备下次使用。

于 2013-03-05T00:08:49.157 回答
0

awk 可以接受吗?

kent$  awk -vr=10 'BEGIN{for(i=1;i<=r;i++){s=(i==1)?i:s" "(i-1)*50+1; print s}}'                                                                                            
1
1 51
1 51 101
1 51 101 151
1 51 101 151 201
1 51 101 151 201 251
1 51 101 151 201 251 301
1 51 101 151 201 251 301 351
1 51 101 151 201 251 301 351 401
1 51 101 151 201 251 301 351 401 451
于 2013-03-05T00:16:59.473 回答