【问题标题】:bash printing and incrementing array valuesbash打印和递增数组值
【发布时间】:2012-11-14 05:10:06
【问题描述】:

我正在制作一个 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'
$ ~ 

【问题讨论】:

  • 这些值是否必须在数组中,或者您可以根据需要生成它们吗?
  • 您的 for i in ... 缺少对应的 do - 例如for i in $(seq 1 9); do pass[3]="$i"; done
  • 有很多方法可以完成这项任务,但是为了尽量减少更改并回答代码中的问题,您忘记了 for 表达式后面的“do”。

标签: linux arrays bash printing sh


【解决方案1】:

您可以使用seq 进行格式化:

seq -w 0000 0010

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

【讨论】:

    【解决方案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】:
      #!/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
      

      你忘了“做”

      【讨论】:

      • 这是一种非常低效的方法。更喜欢anubhava的回答。
      • @gniourf_gniourf 我也是。但我正在解决他的示例代码不起作用的原因。他排除了do
      【解决方案4】:

      使用这个纯 bash 脚本:

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

      输出:

      0000
      0001
      0002
      0003
      0004
      0005
      0006
      0007
      0008
      0009
      

      【讨论】:

      • +1 但也可以for i in {1..10}; do printf "%04d\n" $i; done。不确定哪种风格的 for 循环更好;我只是喜欢扩展。
      • @RayToal:我只是更喜欢for ((i=0; i&lt;10; i++));,因为它也接受像N=10; for ((i=0; i&lt;N; i++)); 这样的变量。
      • 是的,总体来说肯定更灵活。
      猜你喜欢
      • 2012-11-14
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      • 2020-11-14
      相关资源
      最近更新 更多