如何在Bash脚本中为特殊字符制作特殊字符?

时间:2011-11-30 23:02:30

标签: bash shell utf-8 special-characters

我想知道如何在我的bash脚本中创建一个Celsius字符,所以我可以在“CPU temp:50 C”行中更正输出? 这种特殊字符的转义序列是什么,只要我的字体支持它们?

还在挠我的头......

更确切地说,我需要它在conky中使用 我用这行:awk'{printf($ 3“C”)}'。我应该如何纠正它以便输出摄氏度? 如果我直接插入℃字符,则将其拧紧。

4 个答案:

答案 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)

你可以试试这个:

echo -e "CPU temp: 50\xE2\x84\x83"

相关:How do you echo a 4-digit Unicode character in Bash?