我被一个小问题卡住了。我有一个命令可以将输出通过管道传输到awk,但我希望将的输出逐个捕获到一个数组中。
我的例子:
myarr=$(ps -u kdride | awk '{ print $1 }')但这会将我的所有输出捕获到一个用逗号分隔的巨大字符串中:
output: PID 3856 5339 6483 10448 15313 15314 15315 15316 22348 29589 29593 32657 1我还尝试了以下几种方法:
IFS=","
myarr=$(ps -u kdride | awk '{ print $1"," }')
But the output is: PID, 3856, 5339, 6483, 10448, 15293, 15294, 15295, 15296, 22348, 29589, 29593, 32657,
1我希望能够将每个单独的pid捕获到它自己的数组元素中。设置IFS = '\n'不会做任何事情,并保留我的原始输出。我需要做哪些更改才能使其正常工作?
发布于 2013-02-27 14:00:39
添加其他括号,如下所示:
myarr=($(ps -u kdride | awk '{ print $1 }'))
# Now access elements of an array (change "1" to whatever you want)
echo ${myarr[1]}
# Or loop through every element in the array
for i in "${myarr[@]}"
do
:
echo $i
done另请参见bash — Arrays。
发布于 2019-08-15 01:55:13
使用Bash的内置mapfile (或其同义词readarray)
mapfile -t -s 1 myarr < <(ps -u myusername | awk '{print $1}')至少在GNU/Linux中,你可以格式化ps的输出,所以不需要awk和-s 1
mapfile -t myarr < <(ps -u myusername -o pid=)https://stackoverflow.com/questions/15105135
复制相似问题