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

如何在bash脚本中去除回车符?终端执行命令正常脚本运行报错

报错原因

该问题是由双引号下的bash转义解析规则导致的:

  • 你在sed表达式中使用双引号包裹"s/[\]r//g",bash执行脚本解析双引号内容时,会将表达式内的单个反斜杠\当作转义符吃掉,最终传递给sed的实际表达式变成了s/[]r//g
  • sed接收到错误的正则表达式后,会将[]识别为提前闭合的空字符组,后续的r//g不符合s命令的语法规则,因此抛出未知选项的报错。
  • 交互式终端执行时的解析规则和非交互式脚本存在细微差异,因此会出现终端运行正常、脚本执行报错的区别。
解决办法

下面是三种可行的修复方案,按需选择即可:

  • 方案1:用单引号包裹sed表达式(最推荐)
    单引号不会触发bash的转义解析,内容会原样传递给sed,修改后脚本如下:
#!/bin/bash
echo "hell\ro" | sed -e 's/[\]r//g'
  • 方案2:双引号下对反斜杠做二次转义
    如果必须使用双引号(比如需要在表达式中引用bash变量),需要写2个反斜杠才能让sed拿到正确的单个反斜杠:
#!/bin/bash
echo "hell\ro" | sed -e "s/[\\]r//g"
  • 方案3:使用GNU sed原生支持的\r匹配回车
    如果你的需求就是删除文本中的回车符,直接用\r匹配写法更简洁,无需额外处理转义:
#!/bin/bash
echo "hell\ro" | sed -e 's/\r//g'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:45:02