配列設定があります。
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
変更された配列はです"$@"
。