2016-10-28 5 views
0

스크립트 단순화 및 새로운 미래 배열 작성을 위해이라는 연관 배열을 사용하여 목록을 만들려고합니다.연관 배열을 사용하여 목록 만들기

내가 list({}, {})을 작성하는 것입니다. bash에 현재 사전을 가리키는 목록을 작성할 수 없습니다.

programs=(foo bar) 

for program in "${programs[@]}"; do # Declare all arrays in programs 
    declare -A $program 
done 

foo[var]=`ls -al ~` # Declare some variables in each array 
bar[var]=`ls -al /` 

for program in "${programs[@]}"; do # Print each var key in each array 
    if [ "${${program}[var]+True}" = True ]; then 
     echo ${${program}[var]} 
    fi 
done 

그리고 단지 bad substitution 오류를 계속 제공합니다. 나는 중첩 된 배열이 bash에서 불가능하다는 것을 알고 있지만, 불가능한 배열을 가리키고 있는가?

답변

3

간접 매개 변수 확장을 사용해야합니다.

for program in "${program[@]}"; do 
    t=$program[var] # This is a literal string, not an array expansion 
    echo "${!t}"  # This is an indirect array expansion 
done 
+0

감사합니다. 나는이 문제와 관련된 또 다른 문제에 봉착한다. 'if [ "$ {$ {! t} + True}"= True]'키가 존재 하는지를 검사하지만, 같은 에러를 발생시킵니다. – Flippym

+1

매개 변수 확장을 중첩 할 수 없습니다. 그래서 간접 확장이 필요합니다. 셸은 데이터 구조를 만드는 데 실제로 적합하지 않습니다. – chepner

+0

현재 지원되지 않는 소프트웨어를 사용하는 데 열을 올릴 수 있다면 ksh93을 복합 변수와 하위 변수, 즉'echo $ {.sh} -> 명령 달러 edcol edmode edtext file fun global level lineno 일치 이름 공간 통계 하위 스크립트 하위 쉘 유형 값 버전'및'echo $ {. sh.version} -> 버전 JM 93t + 2010-05-24'. 행운을 빕니다. – shellter

관련 문제