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
添加回来。
我有一个以 \r\n
:
$ # 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
添加回来。