我想知道如何在我的bash脚本中创建一个Celsius字符,所以我可以在“CPU temp:50 C”行中更正输出? 这种特殊字符的转义序列是什么,只要我的字体支持它们?
还在挠我的头......
更确切地说,我需要它在conky中使用 我用这行:awk'{printf($ 3“C”)}'。我应该如何纠正它以便输出摄氏度? 如果我直接插入℃字符,则将其拧紧。
答案 0 :(得分:11)
根据终端的设置解释脚本输出到终端的所有非控制字节序列。如果将其配置为将传入数据解释为utf-8,那么您在bash脚本中需要执行的操作将根据utf-8的要求输出Celsius字符。
正确设置终端取决于您使用的应用程序。它很可能已经处于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"; }'
℃
答案 1 :(得分:2)
Bash 现在支持使用 \u
的 Unicode 转义序列:
echo -e "\u00b0"
将打印
°
答案 2 :(得分:0)
据我所知,没有转义序列。
答案 3 :(得分:0)