bash 变量中的回车符 return

Carriage return in a bash variable

我有一个以 \r\n:

结尾的 bash 变量
$ # Not the real command to get VAR's value, just an example
$ VAR="$(echo -en 'hello\r\n')"
$ hexdump -C <<< "$VAR"
00000000  68 65 6c 6c 6f 0d 0a                              |hello..|
00000007

我想删除 \r\n 本身已由 bash 正确处理)。

我可能 trim 它 (VAR="$(tr -d '\r' <<< "$VAR")"),但这意味着 运行 一个专门用于该任务的过程。

我尝试使用“删除匹配的后缀模式”bash 功能,但找不到要使用的模式(例如,${VAR%\r}${VAR%\x0d}${VAR%[\r]}——但是它们都不起作用。

知道如何在不创建子进程的情况下删除 \r 吗?

使用 ANSI C 引号。使用替换,使用

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

如果你只想删除最后一个\n之前的\r,你可以使用

var=${var%$'\r\n'}$'\n'

即您必须同时删除 \r\n,因此您需要将 \n 添加回来。