2014-02-26 50 views
11

我有一些變量$a。這個變量有非打印字符(回車^ M)。從bash變量中刪除非打印字符

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

我該如何刪除該字符? 我知道echo "$a"顯示正確。但對我而言這不是一個解決方案。

回答

17

你可以使用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 
+3

*請注意:*這也將刪除變音等諸多實際可打印字符。 – Chiru

+0

通過https://alvinalexander.com/blog/post/linux-unix/how-remove-non-printable-ascii-characters-file-unix進行調整,我得到了更好的結果:'tr -cd'\ 11 \ 12 \ 15 \ 40- \ 176'' – qneill

6

要刪除剛剛從a後回車,使用

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