我有一些变量$a
。此变量具有非打印字符(回车符 ^M)。
>echo $a
some words for compgen
>a+="END"
>echo $a
ENDe words for compgen
我怎样才能删除那个字符?我知道echo "$a"
正确显示它。但就我而言,这不是解决方案。
您可以使用
tr
:
tr -dc '[[:print:]]' <<< "$var"
将从$var
中删除不可打印的字符。
$ foo=$'abcrdef'
$ echo "$foo"
def
$ tr -dc '[[:print:]]' <<< "$foo"
abcdef
$ foo=$(tr -dc '[[:print:]]' <<< "$foo")
$ echo "$foo"
abcdef
要从a
中删除尾随回车符,请使用
a=${a%$'r'}
我试图通过libnotify发送通知,内容可能包含不可打印的字符。 现有的解决方案对我不太有用(使用tr
字符白名单有效,但去除任何多字节字符)。
以下是通过💩测试时有效的方法:
message=$(iconv --from-code=UTF-8 -c <<< "$message")
等效于仅使用 shell 内置的 tr
方法:
cleanVar=${var//[![:print:]]/}
。如果适用,将:print:
替换为要保留的字符类。
tr -dc '[[:alpha:]]'
将您的字符串转换为仅包含字母字符(如果需要)