mou*_*aks 8 bash shell utf-8 special-characters
我想知道如何在我的bash脚本中创建一个Celsius字符,所以我可以在"CPU temp:50 C"行中更正输出?这种特殊字符有哪些转义序列,只要我的字体支持它们?
还在挠我的头......
更确切地说,我需要它在conky中使用我使用这一行:awk'{printf($ 3"C")}'.我应该如何纠正它以便输出摄氏度?如果我直接插入℃字符,则将其拧紧.
Ada*_*man 13
脚本输出到终端的所有非控制字节序列将根据终端的设置进行解释显示.如果配置了解释传入的数据为UTF-8 ,那么所有你需要在bash脚本做的是输出所要求的摄氏字符UTF-8 .
正确设置终端取决于您使用的应用程序.它很可能已经处于utf-8模式.
为了显示您想要的字符,您需要查找其Unicode代码点并在utf-8中对其进行编码,或者您可以在已经显示字符的utf-8序列的地方查找它.这里描述了摄氏特征.
Celsius utf-8序列是0xE2 0x84 0x83,因此您可以使用$'string'构造在shell中显示它,因为它接受\xhh转义:
$ echo $'\xe2\x84\x83'
?
Run Code Online (Sandbox Code Playgroud)
或者用-e回声:
$ echo -e '\xe2\x84\x83'
?
Run Code Online (Sandbox Code Playgroud)
此外,您可以将其分配给变量
$ CEL=$'\xe2\x84\x83'
$ echo $CEL
?
Run Code Online (Sandbox Code Playgroud)
如果您希望将℃显示为两个单独的字符:度字符和C字母,则可以使用此字符和此命令:
$ echo $'\xc2\xb0'C
°C
Run Code Online (Sandbox Code Playgroud)
如果您使用的shell不支持该$'string'构造,您还可以使用perl或python等实用程序:
$ python -c 'print "\xe2\x84\x83"'
?
$ perl -e 'print "\xe2\x84\x83\n"'
?
Run Code Online (Sandbox Code Playgroud)
在GNU中,awk您可以使用标准C语言转义\xhh,例如:
$ awk 'BEGIN { print "\xe2\x84\x83"; }'
?
$ awk 'BEGIN { print "\xc2\xb0\C"; }'
°C
Run Code Online (Sandbox Code Playgroud)
请注意,需要额外的反斜杠来终止十六进制数字(没有它,转义序列将消耗包括字母C在内的所有十六进制数字,请参阅GNU awk用户指南).
更便携的解决方案awk是使用八进制序列.由于十六进制0xC2是八进制302而十六进制0xB0是八进制260,因此您可以执行以下操作:
$ awk 'BEGIN { print "\302\260C"; }'
°C
Run Code Online (Sandbox Code Playgroud)
同样的,
$ awk 'BEGIN { print "\342\204\203"; }'
?
Run Code Online (Sandbox Code Playgroud)