BASH:echo -e不适用于Unicode Cyrillic

时间:2017-05-20 15:25:18

标签: linux bash unicode 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 one刚刚安装,所以没有太多内容。到目前为止我唯一安装的是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

致敬https://www.stevejenkins.com/blog/2014/09/how-to-manually-update-bash-to-patch-shellshock-bug-on-older-fedora-based-systems/

1 个答案:

答案 0 :(得分:1)

\Uxxxx 4.2中添加了对echoprintf的参数中的bash Unicode文字的支持。

来自change log

  

本文档详细介绍了此版本bash-4.2-alpha之间的变化,   和以前的版本,bash-4.1-release。

     

[...]

     
      
  1. Bash中的新功能

         

    [...]

         

    d。 $' ...',echo和printf了解\ uXXXX和\ UXXXXXXXX转义序列。

  2.