如何在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
相关产品推荐
相关产品推荐

