在BASH中,如何替换HTML <textarea></textarea> 写入的文件中变量中存在的\r?

13

如何替换 \r?

#!/bin/bash
...

# setup
if [[ $i =~ $screen ]]; then

    ORIGINAL=${BASH_REMATCH[1]}          # original value is: 3DROTATE\r
    AFTER   =${ORIGINAL/\\r/}            # does not replace \r
    myThirdPartyApplication -o $replvar  # FAILS because of \r

fi

1
在编程中,= 前后不能有空格。 - glenn jackman
5个回答

25

这应该会删除第一个 \r。

AFTER="${ORIGINAL/$'\r'/}"

如果你需要将它们全部移除,请使用${ORIGINAL//$'\r'/}


1
在我看来,这是最好的答案,因为它避免了启动外部程序(如sed或tr)的开销。$'\r'开头的$对于将\r转换为要替换的内容中的“回车符”字符至关重要。也许不太明显,\r被替换为空(在最后一个/和}之间没有字符)。 - Tim Bird
这可能是一个得票最高的答案,对我也起作用。但是Shellcheck报告了一个问题:https://github.com/koalaman/shellcheck/wiki/SC3060 - Mohammad Faisal

11

你可以使用sed,例如:

AFTER=`echo $ORIGINAL | sed 's/\\r//g'`

它也在开头删除了 $'。很酷。 - Josef Klimuk
2
成功了!只需要稍微改进一下:在赋值时不允许有空格:AFTER=echo... - JRichardsz

5
另一个选择是使用“tr”删除字符,或用 \n 或其他任何内容替换它。
 ORIGINAL=$(echo ${BASH_REMATCH[1]} | tr -d '\r')

3
与@tharrrk的方法类似,此参数替换也会删除最后的'\r':
AFTER="${ORIGINAL%'\r'}"

3

只需使用文字符号^M,它对bash没有任何意义。


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