Bash 提示无法识别 Unicode 转义符

Bash 提示无法识别 Unicode 转义符

我正在尝试使用 Unicode 字符自定义 Bash 提示符,但遇到了一些麻烦。如果我尝试包含如下 Unicode 字符:

$ echo ☢ | hexdump -C
00000000  e2 98 a2 0a                                       |....|
00000004

$ PS1="\xe2\x98\xa2\x0a"

我看到我的提示是这样的:

\xe2\x98\xa2\x0a

...而不是显示 ☢ 字符。我究竟做错了什么?

答案1

bash对于简单的双引号来说,这不是有效的转义语法。尝试一下

PS1=$'\xe2\x98\xa2 '

这使用了特殊的$'...'引用that bashhas 和 which 确实支持 ANSI C 转义。请注意,这0a只是换行符(换行符),我怀疑您想要这样,所以我冒昧地将其替换为上面的空格。

当然,您可以只使用原始字符本身 ( PS1='☢ '),而不必经历查找 UTF-8 编码,然后输入转义符的整个繁琐过程,它仍然可以工作。

答案2

在最新版本的 bash 中,您还可以使用 Unicode 值:

PS1=$'\u2622 '

这样,即使本地字符集/编码不是 utf-8,它也会正确扩展/显示(或者至少不会那么糟糕)(否则会导致 bash 崩溃或输出垃圾,因为我认为我发现了一个错误那里)。

相关内容