我有一些变量$a
。此变量具有非打印字符(回车符^ M)。
>echo $a
some words for compgen
>a+="END"
>echo $a
ENDe words for compgen
如何删除该字符?
我知道echo "$a"
显示正确。但在我的情况下,这不是解决方案。
答案 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")