Все неконтролируемые последовательности байтов, которые выводит ваш скрипт на терминал, интерпретируются для отображения в соответствии с настройками терминала. Если вы сконфигурируете его для интерпретации входящих данных как utf-8 , то все, что вам нужно сделать в скрипте bash, это вывести символ Цельсия в соответствии с utf-8 .
Правильная настройка терминала зависит от используемого вами приложения. Вполне вероятно, что он уже находится в режиме utf-8.
Чтобы отобразить нужный вам символ, вам нужно найти его кодовую точку Unicode и закодировать его в utf-8, или вы можете найти его где-нибудь, где уже показана последовательность utf-8 символа. Символ Цельсия описан здесь например.
Последовательность по Цельсию utf-8 равна 0xE2 0x84 0x83, поэтому вы можете отобразить ее в своей оболочке с помощью конструкции $'string'
, поскольку она принимает escape-код \xhh
:
$ echo $'\xe2\x84\x83'
℃
или эхо с -e:
$ echo -e '\xe2\x84\x83'
℃
Кроме того, вы можете присвоить его переменной
$ CEL=$'\xe2\x84\x83'
$ echo $CEL
℃
Если вы хотите отобразить ℃ в виде двух отдельных символов: символа степени и буквы C, тогда вы можете использовать этот символ и эту команду:
$ echo $'\xc2\xb0'C
°C
Если вы используете оболочку, которая не поддерживает конструкцию $'string'
, вы также можете использовать такие утилиты, как perl или python:
$ python -c 'print "\xe2\x84\x83"'
℃
$ perl -e 'print "\xe2\x84\x83\n"'
℃
В GNU awk
вы можете использовать стандартные экранирования языка C, включая \xhh
, например:
$ awk 'BEGIN { print "\xe2\x84\x83"; }'
℃
$ awk 'BEGIN { print "\xc2\xb0\C"; }'
°C
Обратите внимание, что для завершения шестнадцатеричного числа потребовалась дополнительная обратная косая черта (без нее escape-последовательность потребляет все шестнадцатеричные цифры, включая букву C, см. Руководство пользователя GNU awk ).
Более переносимым решением в awk
является использование восьмеричной последовательности. Поскольку шестнадцатеричный 0xC2 является восьмеричным 302, а шестнадцатеричный 0xB0 - восьмеричным 260, вы можете сделать следующее:
$ awk 'BEGIN { print "\302\260C"; }'
°C
Аналогично, * 1 046 *
$ awk 'BEGIN { print "\342\204\203"; }'
℃