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

Bash脚本中为变量赋值时如何保留Windows换行符?

解决Bash变量保留Windows换行符的问题

你的代码失效的核心原因是输出变量时未用双引号包围,导致Bash将换行符解析为空格;另外用echo+命令替换的赋值方式完全没必要,反而容易引发问题。以下是两种可行的解决方案:

方法一:直接用ANSI-C引号赋值(推荐)

Bash支持$'...'语法,能直接解析\r、\n这类转义序列,无需借助echo。赋值后输出时记得用双引号包围变量,避免分词丢失换行:

foo=$'one\r\ntwo\r\nthree\r\n'
echo -n "$foo" > Readme.txt

方法二:修正原命令的输出逻辑

如果坚持用命令替换的方式赋值,只需确保输出变量时用双引号包围即可(赋值时你已经用双引号包围了命令替换,变量本身其实保留了换行符):

foo="$(echo -n one$'\r'$'\n'two$'\r'$'\n'three$'\r'$'\n')"
# 必须用双引号包围变量,否则换行会被替换为空格
echo -n "$foo" > Readme.txt

补充说明

  • 当执行echo $foo时,Bash会启动分词机制,将变量中所有属于IFS(默认包含空格、换行、制表符)的字符替换为空格,这就是换行消失的直接原因。
  • 命令替换$(...)会保留输出内容中间的换行符,仅会去掉末尾的连续换行,所以你原代码中变量foo其实已经包含了换行,只是输出时没加引号导致显示异常。

内容的提问来源于stack exchange,提问作者Dan R.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:57:35