배열을 반복하고 배열에 새 항목을 추가합니다.

배열을 반복하고 배열에 새 항목을 추가합니다.

배열 설정이 있습니다.

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

수정된 배열은 입니다 "$@".

관련 정보