2011-11-30 61 views
5

我想知道如何在我的bash脚本中制作一个摄氏字符,所以我可以在“CPU temp:50 C”行中更正输出结果? 这种特殊字符的转义序列是什么,提供我的字体支持它们?如何在Bash脚本中为conky创建特殊字符?

仍然抓我的头......

更准确地说我需要它在Conky的 使用我用这个行:awk '{printf的($ 3" C“)}'。我应该如何纠正它,以便输出摄氏度? 原因如果我直接插入℃字符,conky螺丝它。

回答

8

根据终端的设置,脚本输出到终端的所有非控制字节序列都被解释为显示。如果您将其配置为将传入数据解释为utf-8,则您在bash脚本中的所有操作都将按照utf-8的要求输出摄氏字符。

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

为了显示您想要的字符,您需要查找其Unicode编码点并使用utf-8编码,或者您可以在某处查看字符的utf-8序列。例如,摄氏字符描述为here

摄氏度UTF-8序列是0xE2的0x84 0×83,所以你可以在使用$'string'构建你的外壳,因为它接受\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 

如果您正在使用的不支持$'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"; }' 
℃ 
+0

感谢你的帮助 – mountpeaks

+0

我不能够找到的'$'string''构建任何参考;它的确切名称是什么,或者它在哪里记录? – davide

+0

'man bash'然后搜索'$'' –

0

没有对°的转义序列,据我知道的。

相关问题