如何阻止Bash中readarray向数组元素添加换行符?
Bash中readarray末尾换行符的来源与解决办法
换行符的来源
你看到的$'\n'来自两个关键点:
- here-string的默认特性:Bash里用
<<<"$str"这种here-string传递输入时,会自动在字符串末尾追加一个换行符——这是它模拟标准输入的设计,毕竟标准输入通常以换行结尾。 - 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
相关产品推荐
相关产品推荐

