我有一个数组设置:
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
您可以使用索引(而不是值)和 Construction 来迭代数组${!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
(因为我更喜欢使用$@
overbash
有点庞大的数组语法所需的语法):
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
修改后的数组为"$@"
.