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

如何在不创建子进程的情况下删除Bash变量末尾的\r字符?

你之前的写法失效的核心原因是:Bash 的普通单/双引号不会解析\r、\x0d这类转义序列,你写的${VAR%\r}里的\r会被当成字面量的「反斜杠+r」两个字符,自然匹配不到变量里的回车符。

以下是纯Bash内置操作的方案,全程不创建子进程:

方案1:全局删除所有\r字符(最通用)

用Bash参数扩展的全局替换功能,搭配ANSI-C引号$'\r'生成真正的回车符,直接把所有回车替换为空:

VAR=${VAR//$'\r'/}

操作后可以用hexdump验证结果:

$ hexdump -C <<< "$VAR"
00000000  68 65 6c 6c 6f 0a                                 |hello.|
00000006

可以看到0x0d(\r)已经被完全删除,仅保留了需要的0x0a(\n)。

方案2:仅删除末尾的\r(适配你当前的场景)

如果你确定\r仅出现在变量末尾,也可以用后缀移除的写法实现:

# 先移除末尾的\r\n整体,再补回需要保留的\n
VAR=${VAR%$'\r\n'}$'\n'

这个写法不会影响变量中间可能存在的\r字符。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:27:04