我需要在 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
一行
我想创建一个包含线条的数组,而不是单词。
最佳答案
您没有创建数组;您正在创建一个带有换行符分隔值的字符串。替换
arr=$(ps -elf | nawk -v pattern=${userid} '{if ($3==pattern) print}')
与
arr=( $(ps -elf | nawk -v pattern=${userid} '{if ($3==pattern) print}') )
但是,这仍然给您带来一个问题,即数组会将 ps
中每行的每个字段视为单独的元素。更好的解决方案是使用内置的 read
从 ps
读取目录:
ps -elf | while read -a fields; do
if [[ ${fields[2]} = $userid ]]; then
continue
fi
echo "${fields[@]}"
done
关于linux - ksh 中的数组长度总是返回 1 以及为什么数组不是行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15485096/