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

Shell脚本如何将命令执行结果按行存入数组?

问题原因

你遇到的拆分问题是由Bash默认的内部字段分隔符(IFS)规则导致的:默认IFS包含空格、制表符、换行符三种分隔符,直接用return_data_arr=($(MY_COMMAND))赋值时,会把所有符合IFS规则的字符都作为拆分依据,所以行内的空格也会把内容拆成独立的数组元素。

解决方案

方案1:Bash 4.0及以上版本(推荐)

直接使用内置的mapfile(也叫readarray)命令实现按行读取到数组,语法最简单:

# -t 参数用于自动去除每行末尾的换行符
mapfile -t return_data_arr < <(MY_COMMAND)

for data in "${return_data_arr[@]}"; do
    echo -e "data: ${data}"
done

方案2:兼容低版本Bash

如果运行环境的Bash版本低于4.0不支持mapfile,可以用read配合循环实现:

return_data_arr=()
# IFS= 临时清空字段分隔符,避免read自动丢弃行首尾的空白;-r 禁止转义反斜杠
while IFS= read -r line; do
    return_data_arr+=("$line")
done < <(MY_COMMAND)

for data in "${return_data_arr[@]}"; do
    echo -e "data: ${data}"
done

注意不要用MY_COMMAND | while ...的管道写法,这种写法会让while循环在子Shell中执行,循环内给数组的赋值在循环外无法获取,使用上面的进程替换写法可以规避这个问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:06:04