mas*_*omi 207 unicode bash shell character-encoding
我想将Unicode骷髅和交叉骨添加到我的shell提示符中(特别是'SKULL AND CROSSBONES'(U + 2620)),但我无法弄清楚魔法咒语使回声吐出它或任何其他, 4位Unicode字符.两位数的一个很容易.例如,echo -e"\ x55",.
除了下面的答案之外,应该注意的是,显然,您的终端需要支持Unicode才能使输出符合您的预期.gnome-terminal做得很好,但默认情况下不一定开启.
在macOS的终端应用程序上转到Preferences-> Encodings并选择Unicode(UTF-8).
var*_*tec 215
在UTF-8中,它实际上是6位数(或3个字节).
$ printf '\xE2\x98\xA0'
?
要检查它是如何由控制台编码的,请使用hexdump:
$ printf ? | hexdump
0000000 98e2 00a0                              
0000003
Jul*_*ano 90
% echo -e '\u2620'     # \u takes four hexadecimal digits
?
% echo -e '\U0001f602' # \U takes eight hexadecimal digits
这适用于Zsh(我已经检查过4.3版本)和Bash 4.2或更新版本.
Rob*_*obM 67
只要您的文本编辑器可以处理Unicode(可能以UTF-8编码),您就可以直接输入Unicode代码点.
例如,在Vim文本编辑器中,您将进入插入模式并按Ctrl+ V+ U然后将代码点编号作为4位十六进制数字(如果需要,使用零填充).所以你要键入Ctrl+ V+ U 2 6 2 0.请参阅:将Unicode字符插入文档的最简单方法是什么?
在运行Bash的终端上,您可以键入CTRL+ SHIFT+ U并键入所需字符的十六进制代码点.在输入过程中,光标应显示带下划线u.您键入的第一个非数字结束输入,并呈现该字符.因此,您可以使用以下方法在Bash中打印U + 2620:
echo CTRL+ SHIFT+U2620ENTERENTER
(第一个输入结束Unicode输入,第二个输入结束echo命令.)
信用:询问Ubuntu SE
Orw*_*ile 31
这是一个完全内部的Bash实现,没有分叉,无限大小的Unicode字符.
fast_chr() {
    local __octal
    local __char
    printf -v __octal '%03o' $1
    printf -v __char \\$__octal
    REPLY=$__char
}
function unichr {
    local c=$1    # Ordinal of char
    local l=0    # Byte ctr
    local o=63    # Ceiling
    local p=128    # Accum. bits
    local s=''    # Output string
    (( c < 0x80 )) && { fast_chr "$c"; echo -n "$REPLY"; return; }
    while (( c > o )); do
        fast_chr $(( t = 0x80 | c & 0x3f ))
        s="$REPLY$s"
        (( c >>= 6, l++, p += o+1, o>>=1 ))
    done
    fast_chr $(( t = p | c ))
    echo -n "$REPLY$s"
}
## test harness
for (( i=0x2500; i<0x2600; i++ )); do
    unichr $i
done
产出是:
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
Joa*_*uer 14
只需在shell脚本中加入"☠"即可.在正确的区域设置和启用Unicode的控制台上,它将打印得很好:
$ echo ?
?
$
一个丑陋的"解决方法"是输出UTF-8序列,但这也取决于使用的编码:
$ echo -e '\xE2\x98\xA0'
?
$
小智 12
快速单行将UTF-8字符转换为3字节格式:
var="$(echo -n '?' | od -An -tx1)"; printf '\\x%s' ${var^^}; echo
我正在使用这个:
$ echo -e '\u2620'
?
这比搜索十六进制表示要容易得多......我在shell脚本中使用它.这适用于gnome-term和urxvt AFAIK.
小智 7
这三个命令中的任何一个都将在控制台中打印您想要的字符,前提是控制台接受UTF-8字符(大多数当前接受):
echo -e "SKULL AND CROSSBONES (U+2620) \U02620"
echo $'SKULL AND CROSSBONES (U+2620) \U02620'
printf "%b" "SKULL AND CROSSBONES (U+2620) \U02620\n"
SKULL AND CROSSBONES (U+2620) ?
之后,您可以将实际字形(图像、字符)复制并粘贴到任何(支持 UTF-8 的)文本编辑器。
如果您需要查看此类 Unicode 代码点是如何以 UTF-8 编码的,请使用 xxd(比 od 更好的十六进制查看器):
echo $'(U+2620) \U02620' | xxd
0000000: 2855 2b32 3632 3029 20e2 98a0 0a         (U+2620) ....
That means that the UTF8 encoding is: e2 98 a0
或者,在十六进制中避免错误:0xE2 0x98 0xA0。即,空格 (HEX 20) 和换行符 (Hex 0A) 之间的值。
如果您想深入了解将数字转换为字符:请看这里,查看 Greg 的 wiki (BashFAQ) 中有关 Bash 中 ASCII 编码的文章!
您可能需要将代码点编码为八进制,以便快速扩展以正确解码它.
编码为UTF-8的U + 2620是E2 98 A0.
所以在Bash,
export PS1="\342\230\240"
会让你的贝壳提示进入头骨和骨头.
在bash中打印Unicode字符以输出,请使用\ x,\ u或\ U(第一个代表2位十六进制,第二个代表4位十六进制,第三个代表任意长度)
echo -e '\U1f602'
我想使用$'...'语法将其分配给变量
x=$'\U1f602'
echo $x
小智 6
以下是所有可用的 Unicode 表情符号列表:
https://en.wikipedia.org/wiki/Emoji#Unicode_blocks
例子:
echo -e "\U1F304"
要获取此字符的 ASCII 值,请使用 hexdump
echo -e "" | hexdump -C
00000000  f0 9f 8c 84 0a                                    |.....|
00000005
然后使用以十六进制格式通知的值
echo -e "\xF0\x9F\x8C\x84\x0A"
如果你不介意 Perl one-liner:
$ perl -CS -E 'say "\x{2620}"'
?
-CS在输入上启用 UTF-8 解码,在输出上启用 UTF-8 编码。-E将下一个参数评估为 Perl,具有say启用等现代功能。如果您不想在结尾处换行,请使用print代替say。
很抱歉重提这个老问题。但是当使用时,bash有一种非常简单的方法可以从纯 ASCII 输入创建 Unicode 代码点,它甚至根本不会分叉:
unicode() { local -n a="$1"; local c; printf -vc '\\U%08x' "$2"; printf -va "$c"; }
unicodes() { local a c; for a; do printf -vc '\\U%08x' "$a"; printf "$c"; done; };
如下使用它来定义某些代码点
unicode crossbones 0x2620
echo "$crossbones"
或者将前 65536 个 unicode 代码点转储到标准输出(在我的机器上花费不到 2s。额外的空间是为了防止某些字符由于 shell 的等宽字体而相互流入):
for a in {0..65535}; do unicodes "$a"; printf ' '; done
或者讲一个非常典型的父母的故事(这需要 Unicode 2010):
unicodes 0x1F6BC 32 43 32 0x1F62D 32 32 43 32 0x1F37C 32 61 32 0x263A 32 32 43 32 0x1F4A9 10
解释:
printf '\UXXXXXXXX' 打印出任何 Unicode 字符printf '\\U%08x' number打印\UXXXXXXXX转换为十六进制的数字,然后将其馈送到另一个printf以实际打印出 Unicode 字符printf 将八进制 (0oct)、十六进制 (0xHEX) 和十进制(0 或以 1 到 9 开头的数字)识别为数字,因此您可以选择最适合的表示形式printf -v var ..将 的输出收集printf到一个变量中,无需分叉(这极大地加快了速度)local variable 有没有不污染全局命名空间local -n var=other别名var为other,这样赋值就var改变了other。这里一个有趣的部分是,它var是本地命名空间的other一部分,而它是全局命名空间的一部分。
local或global命名空间bash。变量保存在环境中,而且这些变量始终是全局的。Local 只是将当前值放在一边,并在函数再次离开时恢复它。从函数内调用的其他函数local仍然会看到“本地”值。这是一个与在其他语言中发现的所有正常范围规则根本不同的概念(bash如果你是一个不知道这一点的程序员,它的作用非常强大,但可能会导致错误)。在重击中:
\n\nUnicodePointToUtf8()\n{\n    local x="$1"               # ok if \'0x2620\'\n    x=${x/\\\\u/0x}              # \'\\u2620\' -> \'0x2620\'\n    x=${x/U+/0x}; x=${x/u+/0x} # \'U-2620\' -> \'0x2620\'\n    x=$((x)) # from hex to decimal\n    local y=$x n=0\n    [ $x -ge 0 ] || return 1\n    while [ $y -gt 0 ]; do y=$((y>>1)); n=$((n+1)); done\n    if [ $n -le 7 ]; then       # 7\n        y=$x\n    elif [ $n -le 11 ]; then    # 5+6\n        y=" $(( ((x>> 6)&0x1F)+0xC0 )) \\\n            $(( (x&0x3F)+0x80 ))" \n    elif [ $n -le 16 ]; then    # 4+6+6\n        y=" $(( ((x>>12)&0x0F)+0xE0 )) \\\n            $(( ((x>> 6)&0x3F)+0x80 )) \\\n            $(( (x&0x3F)+0x80 ))"\n    else                        # 3+6+6+6\n        y=" $(( ((x>>18)&0x07)+0xF0 )) \\\n            $(( ((x>>12)&0x3F)+0x80 )) \\\n            $(( ((x>> 6)&0x3F)+0x80 )) \\\n            $(( (x&0x3F)+0x80 ))"\n    fi\n    printf -v y \'\\\\x%x\' $y\n    echo -n -e $y\n}\n\n# test\nfor (( i=0x2500; i<0x2600; i++ )); do\n    UnicodePointToUtf8 $i\n    [ "$(( i+1 & 0x1f ))" != 0 ] || echo ""\ndone\nx=\'U+2620\'\necho "$x -> $(UnicodePointToUtf8 $x)"\n\n输出:
\n\n\xe2\x94\x80\xe2\x94\x81\xe2\x94\x82\xe2\x94\x83\xe2\x94\x84\xe2\x94\x85\xe2\x94\x86\xe2\x94\x87\xe2\x94\x88\xe2\x94\x89\xe2\x94\x8a\xe2\x94\x8b\xe2\x94\x8c\xe2\x94\x8d\xe2\x94\x8e\xe2\x94\x8f\xe2\x94\x90\xe2\x94\x91\xe2\x94\x92\xe2\x94\x93\xe2\x94\x94\xe2\x94\x95\xe2\x94\x96\xe2\x94\x97\xe2\x94\x98\xe2\x94\x99\xe2\x94\x9a\xe2\x94\x9b\xe2\x94\x9c\xe2\x94\x9d\xe2\x94\x9e\xe2\x94\x9f\n\xe2\x94\xa0\xe2\x94\xa1\xe2\x94\xa2\xe2\x94\xa3\xe2\x94\xa4\xe2\x94\xa5\xe2\x94\xa6\xe2\x94\xa7\xe2\x94\xa8\xe2\x94\xa9\xe2\x94\xaa\xe2\x94\xab\xe2\x94\xac\xe2\x94\xad\xe2\x94\xae\xe2\x94\xaf\xe2\x94\xb0\xe2\x94\xb1\xe2\x94\xb2\xe2\x94\xb3\xe2\x94\xb4\xe2\x94\xb5\xe2\x94\xb6\xe2\x94\xb7\xe2\x94\xb8\xe2\x94\xb9\xe2\x94\xba\xe2\x94\xbb\xe2\x94\xbc\xe2\x94\xbd\xe2\x94\xbe\xe2\x94\xbf\n\xe2\x95\x80\xe2\x95\x81\xe2\x95\x82\xe2\x95\x83\xe2\x95\x84\xe2\x95\x85\xe2\x95\x86\xe2\x95\x87\xe2\x95\x88\xe2\x95\x89\xe2\x95\x8a\xe2\x95\x8b\xe2\x95\x8c\xe2\x95\x8d\xe2\x95\x8e\xe2\x95\x8f\xe2\x95\x90\xe2\x95\x91\xe2\x95\x92\xe2\x95\x93\xe2\x95\x94\xe2\x95\x95\xe2\x95\x96\xe2\x95\x97\xe2\x95\x98\xe2\x95\x99\xe2\x95\x9a\xe2\x95\x9b\xe2\x95\x9c\xe2\x95\x9d\xe2\x95\x9e\xe2\x95\x9f\n\xe2\x95\xa0\xe2\x95\xa1\xe2\x95\xa2\xe2\x95\xa3\xe2\x95\xa4\xe2\x95\xa5\xe2\x95\xa6\xe2\x95\xa7\xe2\x95\xa8\xe2\x95\xa9\xe2\x95\xaa\xe2\x95\xab\xe2\x95\xac\xe2\x95\xad\xe2\x95\xae\xe2\x95\xaf\xe2\x95\xb0\xe2\x95\xb1\xe2\x95\xb2\xe2\x95\xb3\xe2\x95\xb4\xe2\x95\xb5\xe2\x95\xb6\xe2\x95\xb7\xe2\x95\xb8\xe2\x95\xb9\xe2\x95\xba\xe2\x95\xbb\xe2\x95\xbc\xe2\x95\xbd\xe2\x95\xbe\xe2\x95\xbf\n\xe2\x96\x80\xe2\x96\x81\xe2\x96\x82\xe2\x96\x83\xe2\x96\x84\xe2\x96\x85\xe2\x96\x86\xe2\x96\x87\xe2\x96\x88\xe2\x96\x89\xe2\x96\x8a\xe2\x96\x8b\xe2\x96\x8c\xe2\x96\x8d\xe2\x96\x8e\xe2\x96\x8f\xe2\x96\x90\xe2\x96\x91\xe2\x96\x92\xe2\x96\x93\xe2\x96\x94\xe2\x96\x95\xe2\x96\x96\xe2\x96\x97\xe2\x96\x98\xe2\x96\x99\xe2\x96\x9a\xe2\x96\x9b\xe2\x96\x9c\xe2\x96\x9d\xe2\x96\x9e\xe2\x96\x9f\n\xe2\x96\xa0\xe2\x96\xa1\xe2\x96\xa2\xe2\x96\xa3\xe2\x96\xa4\xe2\x96\xa5\xe2\x96\xa6\xe2\x96\xa7\xe2\x96\xa8\xe2\x96\xa9\xe2\x96\xaa\xe2\x96\xab\xe2\x96\xac\xe2\x96\xad\xe2\x96\xae\xe2\x96\xaf\xe2\x96\xb0\xe2\x96\xb1\xe2\x96\xb2\xe2\x96\xb3\xe2\x96\xb4\xe2\x96\xb5\xe2\x96\xb6\xe2\x96\xb7\xe2\x96\xb8\xe2\x96\xb9\xe2\x96\xba\xe2\x96\xbb\xe2\x96\xbc\xe2\x96\xbd\xe2\x96\xbe\xe2\x96\xbf\n\xe2\x97\x80\xe2\x97\x81\xe2\x97\x82\xe2\x97\x83\xe2\x97\x84\xe2\x97\x85\xe2\x97\x86\xe2\x97\x87\xe2\x97\x88\xe2\x97\x89\xe2\x97\x8a\xe2\x97\x8b\xe2\x97\x8c\xe2\x97\x8d\xe2\x97\x8e\xe2\x97\x8f\xe2\x97\x90\xe2\x97\x91\xe2\x97\x92\xe2\x97\x93\xe2\x97\x94\xe2\x97\x95\xe2\x97\x96\xe2\x97\x97\xe2\x97\x98\xe2\x97\x99\xe2\x97\x9a\xe2\x97\x9b\xe2\x97\x9c\xe2\x97\x9d\xe2\x97\x9e\xe2\x97\x9f\n\xe2\x97\xa0\xe2\x97\xa1\xe2\x97\xa2\xe2\x97\xa3\xe2\x97\xa4\xe2\x97\xa5\xe2\x97\xa6\xe2\x97\xa7\xe2\x97\xa8\xe2\x97\xa9\xe2\x97\xaa\xe2\x97\xab\xe2\x97\xac\xe2\x97\xad\xe2\x97\xae\xe2\x97\xaf\xe2\x97\xb0\xe2\x97\xb1\xe2\x97\xb2\xe2\x97\xb3\xe2\x97\xb4\xe2\x97\xb5\xe2\x97\xb6\xe2\x97\xb7\xe2\x97\xb8\xe2\x97\xb9\xe2\x97\xba\xe2\x97\xbb\xe2\x97\xbc\xe2\x97\xbd\xe2\x97\xbe\xe2\x97\xbf\nU+2620 -> \xe2\x98\xa0\nbash升级2023...
\n从前一段时间开始,bash使用%b在printf:
printf %b\\\\n \\\\U1F600\n\n因此,您可以使用bash的内置-v标志来分配变量:printf
printf -v smiley \\\\U1F600\necho $smiley \n\nuser@host:~$ printf -v skull %b \'\\U2620\'\nuser@host:~$ PS1=${PS1/%\\\\$ /$skull\\\\$ }\nuser@host:~\xe2\x98\xa0$ \n可以胜任这份工作。(注释%b几乎没用)
然后快速显示 unicode 表的某些部分:
\nprintf %b\\\\n \\\\U1F6{{0..9},{A..F}}{{0..9},{a..f}}|paste -d\\  -{,,,}{,,,}\n               \n               \n               \n               \n               \n               \n               \n               \n               \n               \n               \n               \n               \n               \n               \n               \n显示盲文部分:
\nprintf %b\\\\n \\\\U28{{0..9},{A..F}}{{0..9},{a..f}}|paste -d\\  -{,,,}{,,,}\n\xe2\xa0\x80 \xe2\xa0\x81 \xe2\xa0\x82 \xe2\xa0\x83 \xe2\xa0\x84 \xe2\xa0\x85 \xe2\xa0\x86 \xe2\xa0\x87 \xe2\xa0\x88 \xe2\xa0\x89 \xe2\xa0\x8a \xe2\xa0\x8b \xe2\xa0\x8c \xe2\xa0\x8d \xe2\xa0\x8e \xe2\xa0\x8f\n\xe2\xa0\x90 \xe2\xa0\x91 \xe2\xa0\x92 \xe2\xa0\x93 \xe2\xa0\x94 \xe2\xa0\x95 \xe2\xa0\x96 \xe2\xa0\x97 \xe2\xa0\x98 \xe2\xa0\x99 \xe2\xa0\x9a \xe2\xa0\x9b \xe2\xa0\x9c \xe2\xa0\x9d \xe2\xa0\x9e \xe2\xa0\x9f\n\xe2\xa0\xa0 \xe2\xa0\xa1 \xe2\xa0\xa2 \xe2\xa0\xa3 \xe2\xa0\xa4 \xe2\xa0\xa5 \xe2\xa0\xa6 \xe2\xa0\xa7 \xe2\xa0\xa8 \xe2\xa0\xa9 \xe2\xa0\xaa \xe2\xa0\xab \xe2\xa0\xac \xe2\xa0\xad \xe2\xa0\xae \xe2\xa0\xaf\n\xe2\xa0\xb0 \xe2\xa0\xb1 \xe2\xa0\xb2 \xe2\xa0\xb3 \xe2\xa0\xb4 \xe2\xa0\xb5 \xe2\xa0\xb6 \xe2\xa0\xb7 \xe2\xa0\xb8 \xe2\xa0\xb9 \xe2\xa0\xba \xe2\xa0\xbb \xe2\xa0\xbc \xe2\xa0\xbd \xe2\xa0\xbe \xe2\xa0\xbf\n\xe2\xa1\x80 \xe2\xa1\x81 \xe2\xa1\x82 \xe2\xa1\x83 \xe2\xa1\x84 \xe2\xa1\x85 \xe2\xa1\x86 \xe2\xa1\x87 \xe2\xa1\x88 \xe2\xa1\x89 \xe2\xa1\x8a \xe2\xa1\x8b \xe2\xa1\x8c \xe2\xa1\x8d \xe2\xa1\x8e \xe2\xa1\x8f\n\xe2\xa1\x90 \xe2\xa1\x91 \xe2\xa1\x92 \xe2\xa1\x93 \xe2\xa1\x94 \xe2\xa1\x95 \xe2\xa1\x96 \xe2\xa1\x97 \xe2\xa1\x98 \xe2\xa1\x99 \xe2\xa1\x9a \xe2\xa1\x9b \xe2\xa1\x9c \xe2\xa1\x9d \xe2\xa1\x9e \xe2\xa1\x9f\n\xe2\xa1\xa0 \xe2\xa1\xa1 \xe2\xa1\xa2 \xe2\xa1\xa3 \xe2\xa1\xa4 \xe2\xa1\xa5 \xe2\xa1\xa6 \xe2\xa1\xa7 \xe2\xa1\xa8 \xe2\xa1\xa9 \xe2\xa1\xaa \xe2\xa1\xab \xe2\xa1\xac \xe2\xa1\xad \xe2\xa1\xae \xe2\xa1\xaf\n\xe2\xa1\xb0 \xe2\xa1\xb1 \xe2\xa1\xb2 \xe2\xa1\xb3 \xe2\xa1\xb4 \xe2\xa1\xb5 \xe2\xa1\xb6 \xe2\xa1\xb7 \xe2\xa1\xb8 \xe2\xa1\xb9 \xe2\xa1\xba \xe2\xa1\xbb \xe2\xa1\xbc \xe2\xa1\xbd \xe2\xa1\xbe \xe2\xa1\xbf\n\xe2\xa2\x80 \xe2\xa2\x81 \xe2\xa2\x82 \xe2\xa2\x83 \xe2\xa2\x84 \xe2\xa2\x85 \xe2\xa2\x86 \xe2\xa2\x87 \xe2\xa2\x88 \xe2\xa2\x89 \xe2\xa2\x8a \xe2\xa2\x8b \xe2\xa2\x8c \xe2\xa2\x8d \xe2\xa2\x8e \xe2\xa2\x8f\n\xe2\xa2\x90 \xe2\xa2\x91 \xe2\xa2\x92 \xe2\xa2\x93 \xe2\xa2\x94 \xe2\xa2\x95 \xe2\xa2\x96 \xe2\xa2\x97 \xe2\xa2\x98 \xe2\xa2\x99 \xe2\xa2\x9a \xe2\xa2\x9b \xe2\xa2\x9c \xe2\xa2\x9d \xe2\xa2\x9e \xe2\xa2\x9f\n\xe2\xa2\xa0 \xe2\xa2\xa1 \xe2\xa2\xa2 \xe2\xa2\xa3 \xe2\xa2\xa4 \xe2\xa2\xa5 \xe2\xa2\xa6 \xe2\xa2\xa7 \xe2\xa2\xa8 \xe2\xa2\xa9 \xe2\xa2\xaa \xe2\xa2\xab \xe2\xa2\xac \xe2\xa2\xad \xe2\xa2\xae \xe2\xa2\xaf\n\xe2\xa2\xb0 \xe2\xa2\xb1 \xe2\xa2\xb2 \xe2\xa2\xb3 \xe2\xa2\xb4 \xe2\xa2\xb5 \xe2\xa2\xb6 \xe2\xa2\xb7 \xe2\xa2\xb8 \xe2\xa2\xb9 \xe2\xa2\xba \xe2\xa2\xbb \xe2\xa2\xbc \xe2\xa2\xbd \xe2\xa2\xbe \xe2\xa2\xbf\n\xe2\xa3\x80 \xe2\xa3\x81 \xe2\xa3\x82 \xe2\xa3\x83 \xe2\xa3\x84 \xe2\xa3\x85 \xe2\xa3\x86 \xe2\xa3\x87 \xe2\xa3\x88 \xe2\xa3\x89 \xe2\xa3\x8a \xe2\xa3\x8b \xe2\xa3\x8c \xe2\xa3\x8d \xe2\xa3\x8e \xe2\xa3\x8f\n\xe2\xa3\x90 \xe2\xa3\x91 \xe2\xa3\x92 \xe2\xa3\x93 \xe2\xa3\x94 \xe2\xa3\x95 \xe2\xa3\x96 \xe2\xa3\x97 \xe2\xa3\x98 \xe2\xa3\x99 \xe2\xa3\x9a \xe2\xa3\x9b \xe2\xa3\x9c \xe2\xa3\x9d \xe2\xa3\x9e \xe2\xa3\x9f\n\xe2\xa3\xa0 \xe2\xa3\xa1 \xe2\xa3\xa2 \xe2\xa3\xa3 \xe2\xa3\xa4 \xe2\xa3\xa5 \xe2\xa3\xa6 \xe2\xa3\xa7 \xe2\xa3\xa8 \xe2\xa3\xa9 \xe2\xa3\xaa \xe2\xa3\xab \xe2\xa3\xac \xe2\xa3\xad \xe2\xa3\xae \xe2\xa3\xaf\n\xe2\xa3\xb0 \xe2\xa3\xb1 \xe2\xa3\xb2 \xe2\xa3\xb3 \xe2\xa3\xb4 \xe2\xa3\xb5 \xe2\xa3\xb6 \xe2\xa3\xb7 \xe2\xa3\xb8 \xe2\xa3\xb9 \xe2\xa3\xba \xe2\xa3\xbb \xe2\xa3\xbc \xe2\xa3\xbd \xe2\xa3\xbe \xe2\xa3\xbf\nshowU8_256() { \n    local i a\n    for a ;do\n        for i in {0..9} {A..F}; do\n            printf \'\\\\U%05Xx: %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b\\n\' \\\n                0x$a$i \\\\U$a${i}{{0..9},{A..F}}\n        done\n    done\n}\n然后
\nshowU8_256 1f{3,4}\n\\U01F30x:                \n\\U01F31x:                \n\\U01F32x:                \n\\U01F33x:                \n\\U01F34x:                \n\\U01F35x:                \n\\U01F36x:                \n\\U01F37x:                \n\\U01F38x:                \n\\U01F39x:                \n\\U01F3Ax:                \n\\U01F3Bx:                \n\\U01F3Cx:                \n\\U01F3Dx:                \n\\U01F3Ex:                \n\\U01F3Fx:                \n\\U01F40x:                \n\\U01F41x:                \n\\U01F42x:                \n\\U01F43x:                \n\\U01F44x:                \n\\U01F45x:                \n\\U01F46x:                \n\\U01F47x:                \n\\U01F48x:                \n\\U01F49x:                \n\\U01F4Ax:                \n\\U01F4Bx:                \n\\U01F4Cx:                \n\\U01F4Dx:                \n\\U01F4Ex:                \n\\U01F4Fx:                \n为此,在搜索了可靠的方法之后,我最终在 SuperUser Dumping /Browseful full unicode table上发布了我的python  dumpUnicode脚本:
不久:
\ndumpUnicode() {\n  python3 -c $\'from unicodedata import name\\nfor i in range(0x10FFFF):\\n  try:\n    var = name(chr(i))\\n  except:\\n    var = None\\n  finally:\\n    if var:\n      print("\\\\\\\\U%06X: \\47%s\\47 %s" % (i,chr(i),var))\'; }\ndumpUnicode | grep SMIL.*SUNGLAS\\\\\\|FONDUE\n\\U01F60E: \'\' SMILING FACE WITH SUNGLASSES\n\\U01FAD5: \'\' FONDUE\n或者严格回答SO请求:
\ndumpUnicode |grep "\' SKULL AND CROSSBONES"\n\\U002620: \'\xe2\x98\xa0\' SKULL AND CROSSBONES\n不是4 位数字,而是可变的字节数:
\nprintf -v skull \'%b\' \\\\U2620\nLANG=C printf -v skull %q $skull\nIFS=\\\' read -r _ skull _ <<<"$skull"\necho ${skull//\\\\/\\\\0} \n\\0342\\0230\\0240\necho -e ${skull//\\\\/\\\\0} \n\xe2\x98\xa0\n作为一个函数:
\nu8toBytes() { \n    local char\n    printf -v char %b "$1"\n    LANG=C printf -v char %q "$char"\n    IFS=\\\' read -r _ char _ <<< "$char"\n    echo ${char//\\\\/\\\\0}\n    echo -e ${char//\\\\/\\\\0}\n}\nu8toBytes \\\\U2620\n\\0342\\0230\\0240\n\xe2\x98\xa0\nu8toBytes \\\\UA0\n\\0302\\0240\n\xc2\xa0\nu8toBytes \n\\0360\\0237\\0230\\0216\n\n