使bash数组逐步添加另一个数组

时间:2009-11-10 07:43:08

标签: arrays bash

所以,如果我有一个bash数组:

ar=( "one" "two" "three" "four")

制作新数组的最佳方法是什么,如下所示:

ar-new=( "one" "one two" "one two three" "one two three four" )

我在for循环内使用seq制作了一个使用for循环的东西。是否有更好/更优雅的方法来实现这一目标?

2 个答案:

答案 0 :(得分:1)

这是另一种方式:

for ((i=1; i<=${#ar[@]}; i++ ))
do
    ar_new+=("${ar[*]:0:$i} ")
done

答案 1 :(得分:0)

根据您正在尝试完成的内容,您可以在没有任何外部命令的情况下在一个循环中完成。

使用算术for循环:

typeset -a ar
ar=("one" "two" "three" "four")
typeset -a ar_new=()
p=""
for (( i=0; i < ${#ar[@]}; ++i )); do
    p="$p${p:+ }${ar[$i]}"
    ar_new[$i]="$p"
done

使用字符串for循环循环(对于大型数组可能不起作用?,对于大型数组可能会更慢):

typeset -a ar
ar=("one" "two" "three" "four")
typeset -a ar_new=()
p=""
for s in "${ar[@]}"; do
    p="$p${p:+ }$s"
    ar_new=("${ar_new[@]}" "$p")
done