我想知道如何在bash脚本中制作一个摄氏度字符,以便可以更正“CPU temp:50 C”行中的输出吗?
如果我的字体支持特殊字符,这些特殊字符的转义序列是什么?

仍在挠挠我的头...

更准确地说,我需要在conky中使用它
我使用以下行:awk'{printf($ 3“C”)}'。我应该如何校正以使其输出摄氏温度?
原因是如果我直接插入℃字符,请用conky螺丝将其拧紧。

最佳答案

脚本输出到终端的所有非控制字节序列都将根据终端的设置进行解释以便显示。如果将其配置为将传入数据解释为utf-8,则在bash脚本中需要做的所有工作就是按照utf-8的要求输出Celsius字符。

设置终端权限取决于您使用的应用程序。它很可能已经处于utf-8模式。

为了显示您想要的字符,您需要查找其Unicode代码点并以utf-8对其进行编码,或者可以在已经显示了字符utf-8序列的地方查找它。例如,将摄氏字符描述为here

摄氏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"; }'
℃

10-07 19:45
查看更多