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

如何阻止Bash中readarray向数组元素添加换行符?

Bash中readarray末尾换行符的来源与解决办法

换行符的来源

你看到的$'\n'来自两个关键点:

  1. here-string的默认特性:Bash里用<<<"$str"这种here-string传递输入时,会自动在字符串末尾追加一个换行符——这是它模拟标准输入的设计,毕竟标准输入通常以换行结尾。
  2. readarray的读取逻辑:当你用-d ' '指定空格作为分隔符时,readarray只会把空格当作分割点,而here-string额外添加的换行符不属于指定分隔符,所以会被当作最后一个元素的一部分保留下来。

直接阻止添加换行符的方法

放弃here-string,改用printf传递输入就能避免自动加换行:

declare -a arr
str="readarray adds newline here:"
printf "%s" "$str" | readarray -td ' ' arr
declare -p arr

执行后输出会是:

declare -a arr=([0]="readarray" [1]="adds" [2]="newline" [3]="here:")

原理很简单:printf "%s" "$str"会原封不动输出字符串,不会额外追加换行符,readarray读取时自然不会把多余的换行带到最后一个元素里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:04:55