Bash의 문자열 내에 배열 이름이 있는 배열 복사

Bash의 문자열 내에 배열 이름이 있는 배열 복사

Bash 4.3 스크립트에는 변수가 있습니다.

환경="로컬"
config_local=("a" "b" "b" "d")
copy_from="config_${환경}"

배열에 저장된 이름의 값을 copy_from다른 배열에 복사하고 싶습니다 config.

나는 이것을 시도하고 몇 가지 변형을 시도했습니다.

구성=${!copy_from}
에코 "${config[@]}"
구성=${!copy_from[@]}
에코 "${config[@]}"
구성 = ("${!copy_from}")
에코 "${config[@]}"
구성=(“${!copy_from[@]}”)
에코 "${config[@]}"

하지만 전체 배열을 복사하여 첫 번째 요소 config만 가져오거나 가져올 수는 없습니다 .0


0
0

Bash에서 어떻게 할 수 있나요?

답변1

이를 수행하는 방법은 다양 eval하지만 안전하지는 않습니다. 거기Bash 2.05b+에서 이를 수행하는 몇 가지 방법:

$ foo=(a b c)
$ name=foo
$ temp_indirect=${name}[@]
$ printf '<%s>\n' "${!temp_indirect}"
<a>
<b>
<c>

이것은 bash 파서의 구현 세부 사항에 의존하기 때문에(아마도 문서화되지 않았습니까?) 매우 추악하므로 위험을 감수하고 사용하십시오.

일반적으로 복잡한 데이터 구조를 원한다면 다른 언어를 사용하는 것이 좋습니다. 많은 경우 bash에서 이를 가능하게 하는 해결 방법이 있지만 언어가 해당 언어에 최적화되어 있지 않기 때문에 구문이 난해합니다(대부분 IPC 및 파일 작업에 최적화되어 있습니다).

관련 정보