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



我有一些变量$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:]]'

将您的字符串转换为仅包含字母字符(如果需要)

相关内容

  • 没有找到相关文章

最新更新