我想将Unicode头骨和交叉骨头添加到我的shell提示符(特别是' skull and crossbones ' (U+2620)),但我不知道让echo吐出它的魔法咒语,或任何其他4位Unicode字符。两位数的数字很简单。例如echo -e "\x55",。

除了下面的答案之外,还应该注意到,很明显,您的终端需要支持Unicode以使输出符合您的期望。Gnome-terminal在这方面做得很好,但它在默认情况下不一定是打开的。

在macOS的终端应用程序中,选择首选项->编码,并选择Unicode (UTF-8)。


当前回答

只要您的文本编辑器能够处理Unicode(假定以UTF-8编码),您就可以直接输入Unicode代码点。

例如,在Vim文本编辑器中,您可以进入插入模式并按Ctrl + V + U,然后按4位十六进制数(必要时可以用零填充)。输入Ctrl + V + U 2 6 20。参见:在文档中插入Unicode字符的最简单方法是什么?

在运行Bash的终端上,您可以键入CTRL+SHIFT+U,并键入所需字符的十六进制码位。在输入过程中,你的光标应该显示一个带下划线的u。你输入的第一个非数字结束输入,并呈现字符。所以你可以在Bash中使用以下方法打印U+2620:

echo CTRL + SHIFT + U2620ENTERENTER

(第一个输入结束Unicode输入,第二个执行echo命令。)

来源:Ubuntu SE

其他回答

根据Stack Overflow问题Unix cut,删除第一个令牌和https://stackoverflow.com/a/15903654/781312:

(octal=$(echo -n ☠ | od -t o1 | head -1 | cut -d' ' -f2- | sed -e 's#\([0-9]\+\) *#\\0\1#g')
echo Octal representation is following $octal
echo -e "$octal")

输出如下。

Octal representation is following \0342\0230\0240
☠

printf内置(就像coreutils的printf一样)知道接受4位Unicode字符的\u转义序列:

   \uHHHH Unicode (ISO/IEC 10646) character with hex value HHHH (4 digits)

使用Bash 4.2.37(1)测试:

$ printf '\u2620\n'
☠

我用这个:

$ echo -e '\u2620'
☠

这比搜索十六进制表示法要简单得多。我在我的shell脚本中使用它。这适用于侏儒术语和urxvt AFAIK。

如果您不介意Perl一行代码:

$ perl -CS -E 'say "\x{2620}"'
☠

-CS支持输入UTF-8解码和输出UTF-8编码。-E将下一个参数计算为Perl,启用了say等现代特性。如果你不想在结尾使用换行符,使用print而不是say。

您可能需要将代码点编码为八进制,以便快速展开以正确解码它。

U+2620编码为UTF-8为E2 98 A0。

在Bash中,

export PS1="\342\230\240"

会让你的壳迅速变成头骨和骨头。