bash打印和递增数组值

时间:2012-11-26 17:09:22

标签: linux arrays bash printing sh

我正在制作一个bash脚本,我需要打印一个数字,而它会像这样增加:

0000
0001
0002
0003
0004

我做了这个但是没有工作:

#!/bin/bash
i=0
pass[0]=0
pass[1]=0
pass[2]=0
pass[3]=0
for i in $(seq 1 9)
    pass[3]="$i"
    echo ${pass[*]}
done

我将脚本粘贴到cli上,我就明白了。

$ ~ #!/bin/bash
$ ~ i=0
$ ~ pass[0]=0
$ ~ pass[1]=0
$ ~ pass[2]=0
$ ~ pass[3]=0
$ ~ for i in $(seq 1 9)
>     pass[3]="$i"
bash: error sintáctico cerca del elemento inesperado `pass[3]="$i"'
$ ~     echo ${pass[*]}
0 0 0 0
$ ~ done
bash: error sintáctico cerca del elemento inesperado `done'
$ ~ 

4 个答案:

答案 0 :(得分:6)

使用这个纯粹的bash脚本:

for ((i=0; i<10; i++)); do
   printf "%04d\n" $i
one

<强>输出:

0000
0001
0002
0003
0004
0005
0006
0007
0008
0009

答案 1 :(得分:2)

#!/bin/bash
i=0
pass[0]=0
pass[1]=0
pass[2]=0
pass[3]=0
for i in $(seq 1 9)
do
    pass[3]="$i"
    echo ${pass[*]}
done

你忘了'做'

答案 2 :(得分:2)

对于那些喜欢扩展的人,你也可以这样做:

printf "%s\n" {0001..0009}

printf "%.4d\n" {1..9}

没有循环!

您可以存储在数组中:

$ myarray=( {0001..0009} )
$ printf "%s\n" "${myarray[@]}"
0001
0002
0003
0004
0005
0006
0007
0008
0009
$ echo "${myarray[3]}"
0004

答案 3 :(得分:1)

您可以使用seq进行格式设置:

seq -w 0000 0010

(如果你不喜欢{0000..0010}表示法,它更有效但不允许参数替换。)