Удаление непечатаемых символов из переменной в bash
Форум — Admin
Задача: создать переменную из кириллицы рандомной длины. Далее эта переменная будет использована в качестве поля CN в subject.
Не придумал ничего лучше:
subj_gen=$( cat /dev/urandom | grep -aoe [абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ] | tr -d '\n' | head -c $( shuf -i 1-10 -n1 ) ); subj_value="CN=$subj_gen"; echo $subj_value
Т.е. создаю массив из кириллицы, из которого выбираю некоторое количество символов, удаляя пробелы между ними.
На выходе получаю:
root@root:~# subj_gen=$( cat /dev/urandom | grep -aoe [абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ] | tr -d '\n' | head -c $( shuf -i 1-10 -n1 ) ); subj_value="CN=$subj_gen"; echo $subj_value
CN=фвЯПШ
root@root:~#
root@root:~# subj_gen=$( cat /dev/urandom | grep -aoe [абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ] | tr -d '\n' | head -c $( shuf -i 1-10 -n1 ) ); subj_value="CN=$subj_gen"; echo $subj_value
CN=Обэ▒
root@root:~#
root@root:~# cat $subj_value
cat: 'CN=Обэ'$'\320': No such file or directory
root@root:~#
Как видим, в первом случае мы получаем корректную переменную, во втором же в конец этой переменной добавляется непечатаемый символ. Если верить cat – это символ $
.
Хотелось бы понять, почему данный специальный символ появляется и как его удалить из переменной.
Перемещено hobbit из general