선언된 배열 변수 할당

선언된 배열 변수 할당

(여기서 bash를 처음 사용함)

Bash에서는 데이터베이스 테이블이 포함된 배열을 성공적으로 생성한 다음 이를 통해 반복했습니다. 스크립트 상단에서 이 배열을 선언한 다음 이를 다른 변수에 할당하고 싶습니다.

my_databases=(value1 value2 value3)

이것을 반복하면 훌륭하게 작동합니다.for i in "${my_databases[@]}"

그것이 문제이다: 반복하고 싶지 않지만 my_databases중간에 배열을 변수에 할당하려는 단계가 있습니다 new_array.

new_array=$my_databases

이제 이것을 반복하면 new_array첫 번째 배열 값 이후에 스크립트가 실패합니다. 선언된 배열을 새 변수에 올바르게 할당하는 방법은 무엇입니까?

답변1

새 배열 변수를 생성하려면 다음과 같이 이전 배열의 값을 새 배열에 할당합니다.

my_databases=(value1 value2 value3)
new_array=("${my_databases[@]}")

당신이 사용하는 경우

new_array=$my_databases

새 변수는 배열이 아니며( 를 사용하지 않는 한 declare -a new_array=$my_databases) $my_databases배열의 첫 번째 값으로만 ​​확장됩니다.

답변2

나는 당신이복사정렬. 그런 다음 @Freddy의 답변을 사용하십시오.

생성하려는 경우인용하다도착하다동일한데이터, 최신 버전의 bash에는 "namerefs"가 있습니다.

$ my_databases=(value1 value2 value3)
$ declare -n new_array=my_databases

그 다음에:

$ for i in "${!new_array[@]}"; do printf "%d\t%s\n" $i "${new_array[i]}"; done
0   value1
1   value2
2   value3

그러나 첫 번째 배열을 변경하면 변경 사항이 "새" 배열에 표시됩니다.

$ my_databases[2]="updated value 3"
$ for i in "${!new_array[@]}"; do printf "%d\t%s\n" $i "${new_array[i]}"; done
0   value1
1   value2
2   updated value 3

관련 정보