сделать массив bash постепенно добавляя другой массив - PullRequest
2 голосов
/ 10 ноября 2009

Итак, если у меня есть массив bash:

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

Каков наилучший способ сделать новый массив таким, чтобы он выглядел так:

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

Я создал что-то, что использует цикл for внутри цикла for и использует seq Есть ли лучший / более элегантный способ сделать это?

Ответы [ 2 ]

1 голос
/ 10 ноября 2009

Вот еще один способ:

for ((i=1; i<=${#ar[@]}; i++ ))
do
    ar_new+=("${ar[*]:0:$i} ")
done
0 голосов
/ 10 ноября 2009

В зависимости от того, что именно вы пытаетесь выполнить, вы можете сделать это за один цикл без каких-либо внешних команд.

Использование арифметической петли 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 loop (может не работать для больших массивов?, Может быть медленнее для больших массивов):

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...