【问题标题】:How to make special characters in a Bash script for conky?如何在 Bash 脚本中为 conky 制作特殊字符?
【发布时间】:2012-01-10 04:19:24
【问题描述】:

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

还在摸不着头脑……

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

【问题讨论】:

    标签: bash shell utf-8 special-characters


    【解决方案1】:

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

    正确设置终端取决于您使用的应用程序。它很可能已经处于 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"; }'
    ℃
    

    【讨论】:

    • 我找不到对$'string' 构造的任何引用;它的确切名称是什么,或者记录在哪里?
    • 使用degree symbol的唯一问题是它在终端环境中看起来很糟糕,因为使用UNICODE时字体大小不兼容问题。
    【解决方案2】:

    Bash 现在支持使用 \u 的 Unicode 转义序列:

    echo -e "\u00b0"
    

    将打印

    °
    

    【讨论】:

      【解决方案3】:

      你可以试试这个:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-10
        • 2014-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-10
        • 1970-01-01
        相关资源
        最近更新 更多