所以,如果我有一个bash数组:
ar=( "one" "two" "three" "four")
制作新数组的最佳方法是什么,如下所示:
ar-new=( "one" "one two" "one two three" "one two three four" )
我在for循环内使用seq
制作了一个使用for循环的东西。是否有更好/更优雅的方法来实现这一目标?
答案 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