Удаление символов без печати из переменной bash

У меня есть переменная $a. Эта переменная имеет непечатаемые символы (возврат каретки ^ M).

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

Как я могу удалить этот char? Я знаю, что echo "$a" отображает его правильно. Но это не решение в моем случае.

Ответ 1

Вы можете использовать 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

Ответ 2

Чтобы удалить только возвращаемый возврат каретки из a, используйте

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