bash 变量中的回车符

ryo*_*ait 3 bash carriage-return

我有一个以以下结尾的 bash 变量\\r\\n

\n
$ # Not the real command to get VAR's value, just an example\n$ VAR="$(echo -en 'hello\\r\\n')"\n$ hexdump -C <<< "$VAR"\n00000000  68 65 6c 6c 6f 0d 0a                              |hello..|\n00000007\n
Run Code Online (Sandbox Code Playgroud)\n

我想删除\\r\\nbash 本身已正确处理)。

\n

我可能会修剪它 ( VAR="$(tr -d '\\r' <<< "$VAR")"),但这意味着仅针对该任务运行一个进程。

\n

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

\n

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

\n

cho*_*oba 6

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

var=${var//$'\r'}
Run Code Online (Sandbox Code Playgroud)

如果您只想删除\rfinal之前的\n,您可以使用

var=${var%$'\r\n'}$'\n'
Run Code Online (Sandbox Code Playgroud)

即您必须删除 和\r\n因此您需要添加\n后面。