배열 설정이 있습니다.
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
수정된 배열은 입니다 "$@"
.