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

如何用单个read命令将多行文本读取到多个变量中?

解决方法

可以通过单个read命令实现,需要同时调整输入终止符并正确传递多行数据:

# 方法1:利用默认IFS(含换行)拆分字段
read -r -d $'\0' num1 num2 name <<< "$data"$'\0'

# 方法2:显式指定IFS为换行,确保严格按行拆分
IFS=$'\n' read -r -d '' num1 num2 name <<< "$data"$'\0'

原命令失败原因

  1. 未给$data加双引号:<<< $data会让bash将$data中的换行符替换为空格,所有内容合并成一行,导致只有第一个变量被赋值。必须用<<< "$data"才能保留原始换行格式。
  2. 终止符设置逻辑错误:默认read遇到换行就停止读取,所以只拿到第一行。用-d $'\0'(或-d '',二者等价)将终止符改为空字符后,原输入中没有空字符,read会一直等待输入直到EOF,此时退出码非零,触发set -e选项终止脚本。在输入末尾追加$'\0'就能让read正常读取并返回0退出码。

补充说明

  • -r选项用于禁止反斜杠转义,避免意外修改输入内容,建议始终添加。
  • 如果data变量本身包含空字符,上述方法会失效,此时可改用readarray读取到数组后再赋值:
    readarray -t arr <<< "$data"
    num1=${arr[0]} num2=${arr[1]} name=${arr[2]}
    

内容的提问来源于stack exchange,提问作者Mikhail T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:42:03