我需要在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。 为什么? 我的第二个问题: 我尝试回显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
在一行
我想用线创建一个数组,而不是单词。
答案 0 :(得分: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