在Bash变量中的回车符

3

我有一个以 \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正确处理)。
我可以使用VAR="$(tr -d '\r' <<< "$VAR")"来修剪它,但这意味着必须为此任务运行一个进程。
我尝试使用“删除匹配后缀模式”bash功能,但找不到要使用的模式(例如,${VAR%\r}${VAR%\x0d}${VAR%[\r]},但它们都不起作用)。
有什么办法可以在不创建子进程的情况下删除\r吗?

the \n itself is correctly handled by bash 希望你知道 $(...)移除 换行符,而变量本身没有换行符,然后 <<<添加 换行符到 hexdump 的输入中。 - KamilCuk
1
我知道bash可以处理换行符,但我不知道它是如何处理的。谢谢你提供这个信息。 - audeoudh
1个回答

6

请使用 ANSI C 引号。对于替换,请使用

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

如果您只想删除最后一个 \n 前面的 \r,您可以使用:
var=${var%$'\r\n'}$'\n'

即你需要移除\r\n两个字符,所以你需要再添加回\n

实际上,bash本身处理最后的\n,所以${VAR%$'\r'}是有效的。请参考KamilCuk的评论。 - audeoudh
@audeoudh:如果你“有一个以\r\n结尾的变量”,那么你需要自己处理它。如果bash已经删除了\n,你可以使用var=${var%$'\r'} - choroba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接