【问题标题】:BASH: echo -e does not work with Unicode CyrillicBASH:echo -e 不适用于 Unicode Cyrillic
【发布时间】: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

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

【问题讨论】:

  • 您使用的是哪个外壳?在我的 Ubuntu 17.04 上,/bin/echo -e 不会扩展 \u 但内置的 echo 会。 “type -a echo”有什么作用?
  • 谢谢,我想通了。更新了帖子。
  • CentOS 6 快6岁了; CentoOS 7 大约在 3 年前发布。 bash 4.4 已于 6 个多月前发布。
  • 顺便说一句,请考虑使用printf '%b\n' "..." 而不是echo -e "..." -- 请参阅POSIX spec for echo 的应用程序用法和基本原理部分。

标签: linux bash unicode cyrillic


【解决方案1】:

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

来自change log

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

[...]

  1. Bash 中的新功能

    [...]

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

【讨论】:

    猜你喜欢
    • 2016-05-17
    • 2017-03-12
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多