이 질문은 bad substitution shell- trying to use variable as name of array과 유사하지만 배열과 관련이 있습니다. 나는 bash는 스크립트 매우 새로 온 사람과 내가 필요한 것은 같은 것을 할 것입니다 :이 때 나는 bad substitution
오류 그러나Bash, 값을 호출 할 때 연관 배열의 이름으로 변수를 사용하십시오.
xxxxx.txt
: 예상 출력으로
# input
humantocheck="human1"
declare -A human1
declare -A human2
human1=(["records_file"]="xxxxx.txt")
human2=(["records_file"]="yyyyy.txt")
echo ${$humantocheck[records_file]}
. 간접 참조 이렇게
'humantocheck'는 배열이 아닙니다. 어떤 일이 일어나면, $ {$ {! humantocheck} [records_file]}에 변형이 될 것입니다. 그러나 나는 확신하지 못합니다 (나는 마법의 콤보를 찾지 못했습니다). ([쉘 매개 변수 확장] (https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion)을 참조하십시오.) –
@JonathanLeffler가 살펴 봅니다. 여전히 bash에 익숙하지 않으므로 모든 그리스어입니다.) – Jonathan
G [r] eek 관련 매뉴얼의 다른 섹션은 [arrays] (https://www.gnu.org/software/bash/manual/bash.html#Arrays)입니다. . 하나의 가능성은'human1' 또는'human2'에서 일반적인 연관 배열'human'을 생성 한 다음 참조하는 것입니다. 불행히도, 나는 하나의 팽창에 모든 연관 배열을 할당하는 방법이 있다고 생각하지 않습니다. 내가 사용한 가장 좋은 점은 결합 배열 요소를 요소로 복사하는 루프를 사용한다는 것입니다 :'for key in "$ {! human1 [@]}"; do human [$ key] = "$ {human1 [$ key]}"; 다. 일반적으로 간접 변수 이름을 사용하면 합병증 및 재검토/재 작성이 발생합니다. –