배열에서 기존 요소를 제거하고 이후에 새 요소를 추가하는 방법

배열에서 기존 요소를 제거하고 이후에 새 요소를 추가하는 방법

아래는 예입니다. 많은 요소로 시작될 수 있고 현재 유일한 요소로 "없음"이 있는 두 개의 배열을 사용하고 있습니다. 기존 요소를 제거한 다음 주어진 조건이 일치할 때 새 요소를 계속 추가하는 방법이 있습니까? 그렇지 않으면 유지합니다. 배열은 변경되지 않았습니다.

최소한의 코딩으로 방법을 찾아보세요.

array_a=(None)
array_b=(None)
declare -A DICT=([1]="source" [11]="destination" [2]="nowhere")
for index in ${!DICT[@]} ; do
  [[ ${index} =~ 1 ]] && array_a+=("${DICT[${index}]}") 
  [[ ${index} =~ 50 ]] && array_b+=("${DICT[${index}]}")
done 
echo ${array_a[@]}
echo ${array_b[@]}

산출:

None destination source        
None

예상 출력:

destination source
None

나는 이것에 대한 어리석은 해결책을 가지고 있습니다

array_a=(None)
array_b=(None)
declare -A DICT=([1]="source" [11]="destination" [2]="nowhere")
a=0
b=0
for index in ${!DICT[@]} ; do
if [[ ${index} =~ 1 ]] ; then if [[ ${a} -eq 0 ]] ; then ((a++)) ; unset array_a ; fi ; array_a+=("${DICT[${index}]}") ; fi
if [[ ${index} =~ 50 ]]; then if [[ ${b} -eq 0 ]] ; then ((b++)) ;  unset array_b ; fi ; array_b+=("${DICT[${index}]}") ; fi
done 
echo ${array_a[@]}
echo ${array_b[@]}

산출:

destination source
None

답변1

이것을 사용하십시오 :

ini_array_a=(None xyz)
ini_array_b=()
array_a=()
array_b=()
[...]
array_a=(${array_a[@]:-${ini_array_a[@]}})
array_b=(${array_b[@]:-${ini_array_b[@]}})
echo ${array_a[@]:-None}
echo ${array_b[@]:-None}

위치 $ini_array_a$ini_array_b이미 초기화된 배열입니다. 우리는 값이 없는 두 개의 새로운 배열을 정의했습니다. 그렇다면 당신의 일을 하십시오. 배열을 에코하려면 다음을 사용하십시오.매개변수 확장. 배열 $array_a이며 array_b인쇄할 마지막 배열입니다(이것은 문제를 해결하기 위한 것입니다)논평).

${parameter:-word}

    If parameter is unset or null, the expansion of word is substituted.
    Otherwise, the value of parameter is substituted.

관련 정보