【发布时间】:2017-05-20 15:25:18
【问题描述】:
我最近切换到另一个工作机器,但在使用 Cyrillic 时遇到了问题。我的 Bash 脚本从应用程序中获取新消息并使用它们。
但是,这些消息大多是用西里尔文编写的,我得到的结果类似于“\u043f\u0440\u0438\u0432\u0456\u0442”
在运行 Ubuntu 的旧系统上,我可以使用 echo -e 轻松将其转换为普通字母
[18:18 deimos@nc ~] echo -e "\u043f\u0440\u0438\u0432\u0456\u0442"
привіт
很遗憾,这不适用于 CentOS 6 上的新系统。
[15:21] [server1.nichan.net ~] # echo -e "\u043f\u0440\u0438\u0432\u0456\u0442"
\u043f\u0440\u0438\u0432\u0456\u0442
两个系统都是英文的。 CentOS 是今天才安装的,所以没有太多内容。到目前为止,我在它上面安装的唯一东西是 pip 和我的脚本需要的一些 Python 模块,所以可以肯定地说系统是新的。
此外,其他 Unicode 符号似乎也可以正常工作。唯一的问题是西里尔文:
[15:21] [server1.nichan.net ~] # echo -e "\xE2\x98\xA0"
☠
任何帮助将不胜感激。
UPD:看来我的 Bash 已经过时了。我有 4.1,这个功能至少需要 4.3。我使用本指南更新了 Bash:
wget https://ftp.gnu.org/pub/gnu/bash/bash-4.3.tar.gz
tar xvfz bash-4.3.tar.gz
cd bash-4.3/
./configure
make
ls -la bash
cp -f bash /bin/bash
/bin/bash
【问题讨论】:
-
您使用的是哪个外壳?在我的 Ubuntu 17.04 上,/bin/echo -e 不会扩展 \u
但内置的 echo 会。 “type -a echo”有什么作用? -
谢谢,我想通了。更新了帖子。
-
CentOS 6 快6岁了; CentoOS 7 大约在 3 年前发布。
bash4.4 已于 6 个多月前发布。 -
顺便说一句,请考虑使用
printf '%b\n' "..."而不是echo -e "..."-- 请参阅POSIX spec forecho的应用程序用法和基本原理部分。
标签: linux bash unicode cyrillic