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))""と、 z の代わりにループごとに 0 になります。

私が間違っていることを見つけることができませんか?

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 に答える