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

Bash脚本中echo为何去除换行?两种脚本输出差异解析

问题原因解析

第一个脚本能保留换行的原因

  • 执行 FOO=$(cat filename.yaml) 时,$(...) 会完整捕获cat命令输出的所有内容(包括换行符),将其存入变量FOO。
  • 执行 echo "$FOO" 时,双引号包裹变量会强制Bash保留变量内的所有空白字符(换行、空格、制表符),因此输出时会原样还原文件的换行格式。

第二个脚本换行消失的核心原因

问题出在 FOO=$(echo $FOO) 这一步:

  • 这里的$FOO没有用双引号包裹,触发了Bash的**单词拆分(Word Splitting)**机制:变量内的换行符、连续空格都会被视为单词分隔符,原本带换行的内容会被拆成多个独立的"单词"。
  • echo命令接收这些拆分后的单词作为参数,默认会用单个空格连接所有参数并输出,这就把原来的换行符全部替换成了空格。
  • 此时FOO变量里的内容已经变成了用空格连接的单行文本,后续echo "$FOO"自然只会输出一行。

关键总结

Bash中,变量展开时:

  • 加双引号:保留变量内的所有空白格式(包括换行)
  • 不加双引号:触发单词拆分,换行、连续空格都会被替换成单个空格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:15:36