配列を繰り返して、配列に新しい項目を追加します。

配列を繰り返して、配列に新しい項目を追加します。

配列設定があります。

target_array=(
    "item1 -a100 -b250 -caaa"
    "item2 -a110 -cbbb -d1sa"
    "item3 -d2sa -exxx -fyyy"
)

その後、配列を繰り返し、さまざまな操作を実行します。

for target_item in "${target_array[@]}"; do
    #Do Stuff Here
    #and create new items
    x=111
    y=222
    z=333
done

ループ内で新しい変数を取得して配列に追加する必要があるため、最終的には次のようになります。

target_array=(
    "item1 -a100 -b250 -caaa -x111 -y222 -z333"
    "item2 -a110 -cbbb -d1sa -x112 -y223 -z334"
    "item3 -d2sa -exxx -fyyy -x113 -y224 -z335"
)

しかし、これらの項目を配列に追加する方法は?既存のアレイに追加する必要がありますか、新しいアレイを作成する必要がありますか?

powershell項目(item1)と値(100)を持つ属性(-a)を含む「オブジェクト」を使用する「オブジェクト」からスクリプトを移植しようとしています。しかし、Linuxでは似たようなものが見つからなかったので、配列が次善のように見えました。

答え1

を使用すると、bashインデックス(値の代わりに)と構成を使用して配列を繰り返し、${!array[@]}各要素を新しい値に置き換えることができます。

for target_item in "${!target_array[@]}"; do
    x=111
    y=222
    z=333
    target_array["$target_item"]+=" -x$x -y$y -z$z"
done

bash残念ながら、配列要素の値からインデックスを拡張することは不可能です。


zshいわゆる特別な方法を使用して手順を簡素化できます。下付き文字記号 (i)そして通常、配列を繰り返します。

for target_item in "${target_array[@]}"; do
     x=111                    
     y=222                    
     z=333
     i="${target_array[(i)$target_item]}"
     target_array[$i]+=" -x$x -y$y -z$z"
done

答え2

ループから新しい配列を作成し、元の配列をこの新しい配列に設定します。

target_array=(
    "item1 -a100 -b250 -caaa"
    "item2 -a110 -cbbb -d1sa"
    "item3 -d2sa -exxx -fyyy"
)

for target_item in "${target_array[@]}"; do
    # Do Stuff Here
    # and create new items
    x=111
    y=222
    z=333

    new_array+=( "$target_item -x$x -y$y -z$z" )
done

target_array=( "${new_array[@]}" )

使用してください(多少かさばる配列構文よりも必要な構文を/bin/sh使用することを好むので):$@bash

set -- \
    "item1 -a100 -b250 -caaa" \
    "item2 -a110 -cbbb -d1sa" \
    "item3 -d2sa -exxx -fyyy"

for target_item do
    # Do Stuff Here
    # and create new items
    x=111
    y=222
    z=333

    set -- "$@" "$target_item -x$x -y$y -z$z"
    shift
done

変更された配列はです"$@"

関連情報