2013-03-18 2 views
2

없는 이유는 KSH의 UID위한 프로세스의 정보를 에코해야합니다배열의 길이는 항상 1을 반환하고 배열 선

#!/bin/ksh 
read userid 
arr=$(ps -elf | nawk -v pattern=${userid} '{if ($3==pattern) print}') 
arrlen=${#arr[@]} 
echo $arrlen 
for f in "${arr[@]}"; do 
    echo $f 
done 

편곡이 UID에 대한 과정의 배열입니다. arrlen은 항상 1입니다. 왜? 내 두 번째 질문 : 나는 편곡의 모든 요소를 ​​에코하려고 출력

0 
S 
s157759 
22594 
1 
0 
50 
20 
? 
2:06 
/usr/lib/firefox/firefox-bin 

대신에 내가 선 배열을하지 만들

0 S s157759 22594 1 0 50 20 ? 62628 ? 11:14:06 ? 2:06 /usr/lib/firefox/firefox-bin 

라인 하나의입니다 말.

답변

2

배열을 만들지 않습니다. 줄 바꿈으로 구분 된 값을 갖는 문자열을 생성합니다. 이 여전히 배열이 별도의 요소로 ps에서 각 행의 각 필드를 취급 문제를 당신 잎, 그러나

arr=($(ps -elf | nawk -v pattern=${userid} '{if ($3==pattern) print}')) 

arr=$(ps -elf | nawk -v pattern=${userid} '{if ($3==pattern) print}') 

교체합니다. 더 나은 해결책은 read 내장을 사용하여 ps에서 디렉토리를 읽는 것입니다.

ps -elf | while read -a fields; do 
    if [[ ${fields[2]} = $userid ]]; then 
     continue 
    fi 
    echo "${fields[@]}" 
done 
관련 문제