【问题标题】:Increment the elements of an array by 1 (1 thru 1000)将数组的元素增加 1(1 到 1000)
【发布时间】:2013-12-31 06:38:01
【问题描述】:

说到 shell 脚本,我还是个新手。长话短说,我正在尝试每次迭代将数组的值增加一个。这是我的代码

cmd=(1 2 3 4 5 6 7 8 ................)  // How can I pass numbers 1 to 1000 with out having to type manually.
${cmd[@]}

for (( i = 0 ; i < ${#cmd[@]} ; i++ )) do
echo ${cmd[$i]}"

done  

一种方法是 cmd=() ,然后在循环中添加 "let cmd[i]++" 行,但它对我不起作用。提前致谢

【问题讨论】:

  • 您是否只是想将cmd 数组初始化为数字1...1000?还是要先初始化数组,然后再增加数组的元素?
  • @robmayoff 无论哪种方式都可以。只要命令执行的值每次迭代都增加 1。我正在尝试我被建议做的事情。(以下建议)。但如果我们可以通过其他方式做到这一点,请分享。也很高兴知道
  • 在 bash 中 {1..1000} 被评估为 1 2 3 4 5 6 到 1000。较新的 bash 版本甚至支持像 {1..11..2} 这样的增量将评估为 1 3 5 7 9 11.
  • 你可以这样做:for (( i=1 ; i &lt;= 10000; i++ )) do echo $i; done
  • @anubhava 我需要它在一个数组中。

标签: arrays linux bash shell sh


【解决方案1】:

你可以说:

cmd=( $(seq 1000) )

为了创建数组。

【讨论】:

  • +1 - 不知道指定起始编号是可选的,默认为 1。
【解决方案2】:

试试seq 命令

cmd=( $(seq 1 1000) )

【讨论】:

  • 我将用 cmd=( $(seq 1000) ) 替换 cmd=(1 2 3 4 5 6 7 8 ....) 和看看会发生什么感谢您的及时回复
【解决方案3】:

如果您正在运行 bash,则可以利用它的功能。

试试:

cmd=({1..1000})

【讨论】:

  • 这比 $(seq 1000) 有一个优势。 $(seq 1000) 将生成一个子shell,而 {1...1000} 是 bash 原生的并且不会生成子shell。
  • 跑了一个小测试:使用大括号扩展比使用 seq 快大约 20%(然而,单次调用非常快 - 在现代桌面上大约 0.005 秒 - 它可能赢了没关系)。最后,一个小问题 - seq,作为一个外部可执行文件,在一个子进程中运行,而不是一个子shell。
  • @user3088572 仅供参考,我还想跳过数组中的一些数字,并且能够通过执行 cmd=( {2..100} {300..553} {550..100 })
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多