2014-07-09 5 views
0

배열을 설정하고 채우는 데 문제가 있습니다. 이름이 다른 변수의 값이어야합니다 ... 아무도 도와 줄 수 있습니까?배열 이름을 변수 값으로 설정합니다.

 mainTID=${pidArray[$pidCounter]} 
     tempThreadIDs=`ps -eL | grep ${mainTID} | awk '{ if ($2 != '$mainTID') print $2}'` 

     $mainTID=($tempThreadIDs) 

mainTID는 정수이며, 그 정수가 무엇이든 배열을 호출 한 다음 호출 목록을 채우려 'tempThreadIDs'

내가 평가 후면 사용에 대한 생각,하지만 난 정말 계속해야

내 오버 헤드 및 정말 제대로 작동하도록 얻을 수 없었다 ... 나는 그때 먼저 배열을 선언하려고했지만 값 (정수) '유효한 식별자가 아닙니다'이라는 오류가 발생 ... 배열에 전화 번호를 부를 수 없습니까?

미리 감사드립니다.

+1

정확히 무엇을하려고합니까? 코드는 귀하의 질문과 거의 무관 한 것으로 보입니다. –

+0

무엇이'ps -eL | grep $ {mainTID}'할까요? – anubhava

+2

간접 매개 변수 확장을 찾으려는 것 같습니다 (맨 페이지 참조). 그러나 숫자로만 구성된 매개 변수 이름은 위치 매개 변수 용으로 예약되어 있습니다. – chepner

답변

1

페이지의 How can I use variable variables (indirect variables, pointers, references) or associative arrays? 페이지는 실제로 여기에 사용됩니다 (전체 페이지를 읽어야 할 수도 있음).

보관 :

mainTID=${pidArray[$pidCounter]} 
readarray -t VALUES < <(exec ps -eL | awk -v tid="$mainTID" '$1 == tid && $2 != tid { print $2 }') 
IFS='|' eval 'STORAGE[$mainTID]="${VALUES[*]}"' 

사용 : 당신은 그냥 최선의 문자열로 저장을하지만, 쉽게 분석 할 수 수 있도록

If you need to assign multiline values, keep reading. 

A similar trick works for Bash array variables too: 

    # Bash/ksh93/mksh/zsh 

    typeset readFix=${BASH_VERSION+a} 
    aref=realarray 
    IFS=' ' read -d '' -r${readFix:-A} "$aref" <<<'words go into array elements' 
    echo "${realarray[1]}" # prints "go" 
1

불행하게도 배쉬는 다차원 배열을 지원하지 않습니다

mainTID=${pidArray[$pidCounter]} 
IFS='|' read -ra VALUES <<< "${STORAGE[$mainTID]}" 
for V in "${VALUES[@]}"; do 
    # Do something with $V. 
done 

참고 : STORAGE는 배열 변수입니다. 숫자로는 충분합니다. 당신이, 숫자 이외의 키를 사용하려고하는 경우 그러나 단지 사용하기 전에 연관 배열 매개 변수로 선언 : 당신이 선호하는 매개 변수 이름 및 사례 형식을 가질 수 물론

declare -A STORAGE 

.

여러분이 눈치 챘을지도 모르는 것처럼, 나는 Awk 명령을 단순화하거나 수정하려고 시도했다. 나는 그것이 올바르게했기를 바란다.

또 다른 참고 사항 : 접두사 + pid라는 이름의 변수와 간접 매개 변수 확장 쌍을 사용하는 것도 좋은 생각이지만 환경에 큰 오염이 될 수 있으며 필요할 때마다 참조를 계속 사용해야하므로 혼란 스러울 수 있습니다. 변수에서 값을 확장하십시오.

관련 문제