You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中将进程按整行而非单个单词读取到数组中

Bash 数组存储完整进程行的解决方法

你的问题出在Bash默认的字段分割规则:processes=($(ps ...))这种写法会把ps输出的所有内容按空格、制表符、换行符拆分,所以数组里存的是一个个单独的单词,而非整行。

下面是两种可行的修改方案:

方案1:用mapfile(Bash 4.0+ 推荐)

mapfile是Bash专门用来读取整行内容到数组的内置命令,用法简洁:

# 读取ps输出的每一行到processes数组,-t 去掉每行末尾的换行符
mapfile -t processes < <(ps -o pid,comm,%mem,%cpu)

方案2:用while read循环(兼容旧版Bash)

如果你的Bash版本低于4.0,用循环逐行读取并添加到数组:

# 初始化空数组
processes=()
# IFS= 保留行首尾空格,read -r 避免反斜杠被转义
while IFS= read -r line; do
    processes+=("$line")
done < <(ps -o pid,comm,%mem,%cpu)

验证效果

遍历数组查看每个元素:

for line in "${processes[@]}"; do
    echo "$line"
done

输出会是你期望的每一行完整进程信息。

内容的提问来源于stack exchange,提问作者Karl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:32:04