从bash变量中删除非打印字符

时间:2014-02-26 14:59:55

标签: bash variables

我有一些变量$a。此变量具有非打印字符(回车符^ M)。

>echo $a
some words for compgen
>a+="END"
>echo $a
ENDe words for compgen

如何删除该字符? 我知道echo "$a"显示正确。但在我的情况下,这不是解决方案。

3 个答案:

答案 0 :(得分:21)

您可以使用tr

tr -dc '[[:print:]]' <<< "$var"

会从$var删除不可打印的字符。

$ foo=$'abc\rdef'
$ echo "$foo"
def
$ tr -dc '[[:print:]]' <<< "$foo"
abcdef
$ foo=$(tr -dc '[[:print:]]' <<< "$foo")
$ echo "$foo"
abcdef

答案 1 :(得分:6)

要从a仅删除尾随回车,请使用

a=${a%$'\r'}

答案 2 :(得分:1)

我试图通过libnotify发送通知,内容可能包含无法打印的字符。现有的解决方案对我而言并不十分有效(使用tr使用字符白名单,但可以去除所有多字节字符)。

这是通过测试的有效方法:

message=$(iconv --from-code=UTF-8 -c <<< "$message")