2

ksh で UID のプロセス情報をエコーする必要があります。

#!/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 のプロセスの配列です。arrlen は常に 1 です。なぜですか? 2 番目の質問: 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

一行で

単語ではなく、行で配列を作成したい。

4

1 に答える 1

2

配列を作成しているのではありません。改行で区切られた値を持つ文字列を作成しています。交換

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

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

psただし、これでも、配列が各行の各フィールドを個別の要素として扱うという問題が残ります。より良い解決策は、組み込みのps使用からディレクトリを読み取ることです。read

ps -elf | while read -a fields; do
    if [[ ${fields[2]} = $userid ]]; then
      continue
    fi
    echo "${fields[@]}"
done
于 2013-03-18T19:30:32.753 に答える