【问题标题】:Unicode characters in /bin/sh VS /bin/bash/bin/sh VS /bin/bash 中的 Unicode 字符
【发布时间】:2015-04-17 03:22:45
【问题描述】:

请尝试:

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 unicode sh chars


【解决方案1】:

因为 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 的明确问题,仅提及 bash 进行比较。
【解决方案2】:

如果您想在 /bin/sh 中打印一个 unicode 字符(POSIX 不要求支持 \u 序列),请将其按字面意思嵌入到您的脚本中,或者将其分解为其组件字节并单独打印.

对于问题中使用的雪花符号:

printf '\342\235\204'

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

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

【讨论】:

  • 或者只是使用你的终端支持的任何编码,并且不能移植到其他编码,假设你的sh忠实地重复你的字符串。如今,硬编码 UTF-8 编码可能没什么大不了的。
猜你喜欢
  • 2022-08-19
  • 1970-01-01
  • 2012-05-22
  • 1970-01-01
  • 2012-02-05
  • 1970-01-01
  • 2010-09-14
  • 1970-01-01
  • 2011-01-30
相关资源
最近更新 更多