使用 UTF-16 语法在 Bash 提示符(PS1)中包含 Unicode 字符?

使用 UTF-16 语法在 Bash 提示符(PS1)中包含 Unicode 字符?

已有帖子Unix 和 Linux关于在 Bash 提示中包含 Unicode 字符,但是它给出的使用 UTF-16 代码(语法)的方法\uXXXX对我来说不起作用。

我们以此箭头为例:

Unicode字符‘黑色向右箭头’ (U+27A4)

在此处输入图片描述

据我所知,在 Bash PS1 提示符中应该有 3 种方法可以处理 Unicode 字符:

  • UTF-8 八进制值-在本例中为:\342\236\244
  • UTF-8 HEX 值 - 在这种情况下:\xe2\x9e\xa4
  • UTF-16 HEX 值(组合)- 在这种情况下:\u27A4

但是,在我的 Ubuntu 提示符下,只有第一个选项有效,如下图所示:

在此处输入图片描述

解释:

  • 使用PS1='[\u@\h \W]\$ \342\236\244 ',Unicode 字符即可正确应用。
  • 使用PS1='[\u@\h \W]\$ \xe2\x9e\xa4 ',则会应用精确的字符串。
  • 使用时PS1='[\u@\h \W]\$ \u27A4 ',它会应用我的用户名(am),然后应用精确的值27A4

我知道这\u是用户名的 Bash 快捷方式,这就是我感到困惑的原因另一个答案指出这有效 - 对我来说却无效。

有没有办法让 UTF-16 语法适用于 Ubuntu 上的 PS1(因为这既短又容易阅读)?我在 Ubuntu 22.04.1 Server 上。

答案1

如果您想在漂亮的提示中使用\xHH或抨击序列,请在第一个简单引号之前使用,如下所示:\uHHHH$

PS1=$'[\\u@\\h \\W]$ \xe2\x9e\xa4 '

或者

PS1=$'[\\u@\\h \\W]$ \u27A4 '

当然,使用简单的引用时,您不需要\在之前$,但是使用$'...'定义,最好\\在每个PS1特殊字段之前放置两个(在您的情况下为u, h, )W

相关内容