您的脚本输出到终端的所有非控制字节序列都将根据终端的设置进行解释以供显示。如果您将其配置为将传入数据解释为 utf-8,那么您需要在 bash 脚本中执行的操作就是按照 utf-8 的要求输出摄氏度字符。
正确设置终端取决于您使用的应用程序。它很可能已经处于 utf-8 模式。
为了显示您想要的字符,您需要查找其 Unicode 代码点并将其编码为 utf-8,或者您可以在已经显示字符的 utf-8 序列的地方查找它。例如,摄氏字符被描述为here。
Celsius utf-8 序列是 0xE2 0x84 0x83,因此您可以使用 $'string' 构造在 shell 中显示它,因为它接受 \xhh 转义:
$ echo $'\xe2\x84\x83'
℃
或使用 -e 回显:
$ echo -e '\xe2\x84\x83'
℃
另外,您可以将其分配给变量
$ CEL=$'\xe2\x84\x83'
$ echo $CEL
℃
如果你想将℃显示为两个单独的字符:度字符和C字母,那么你可以使用this character和这个命令:
$ echo $'\xc2\xb0'C
°C
如果您使用的 shell 不支持 $'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
请注意,需要一个额外的反斜杠来终止十六进制数字(没有它,转义序列会消耗所有十六进制数字,包括字母 C,请参阅GNU awk user's guide)。
awk 中更便携的解决方案是使用八进制序列。由于十六进制 0xC2 是八进制 302,十六进制 0xB0 是八进制 260,因此可以执行以下操作:
$ awk 'BEGIN { print "\302\260C"; }'
°C
同样,
$ awk 'BEGIN { print "\342\204\203"; }'
℃