/bin/sh VS /bin/bash 中的 Unicode 字符

Unicode characters in /bin/sh VS /bin/bash

请尝试:

bash -c "printf '\u2744'"
bash -c "echo -e '\u2744'"

等等:

sh -c "printf '\u2744'"
sh -c "echo -e '\u2744'"

为什么在 /bin/bash 中我可以得到那个 unicode 字符,但在 /bin/sh 中却不能?如何在 /bin/sh?

中打印一个 unicode 字符(例如

因为 bash 仅支持 4.2 发布系列中的那些。

来自https://tiswww.case.edu/php/chet/bash/CHANGES

------------------------------------------------------------------------------
This document details the changes between this version, bash-4.2-alpha,
and the previous version, bash-4.1-release.
....
3.  New Features in Bash
....
d.  $'...', echo, and printf understand \uXXXX and \UXXXXXXXX escape sequences.

如果你想在 /bin/sh 中打印一个 unicode 字符(POSIX 不需要它来支持 \u 序列),要么将它直接嵌入到你的脚本中,要么中断它分解成它的组成字节并单独打印。

题目中使用的雪花符号:

printf '254'

现在,您如何找到这些数字?最简单的方法是使用 shell 中的 od 支持 unicode:

$ printf '\u2744' | od -b
0000000 342 235 204