![선언된 배열 변수 할당](https://linux55.com/image/161533/%EC%84%A0%EC%96%B8%EB%90%9C%20%EB%B0%B0%EC%97%B4%20%EB%B3%80%EC%88%98%20%ED%95%A0%EB%8B%B9.png)
(여기서 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