2013-03-18 42 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 

ARR是過程的此UID的陣列。 阿倫總是等於1. 爲什麼? 我的第二個問題: 我嘗試呼應ARR的所有元素,並輸出

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

您並未創建數組;你正在用換行符分隔的值創建一個字符串。更換

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

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

然而,這仍然給你留下的陣列將視各行的每個字段從ps爲單獨的元件的問題。更好的解決方案是使用內置的readps讀取目錄:

ps -elf | while read -a fields; do 
    if [[ ${fields[2]} = $userid ]]; then 
     continue 
    fi 
    echo "${fields[@]}" 
done 
相關問題