我正在尝试使用 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 bash
has 和 which 确实支持 ANSI C 转义。请注意,这0a
只是换行符(换行符),我怀疑您想要这样,所以我冒昧地将其替换为上面的空格。
当然,您可以只使用原始字符本身 ( PS1='☢ '
),而不必经历查找 UTF-8 编码,然后输入转义符的整个繁琐过程,它仍然可以工作。
答案2
在最新版本的 bash 中,您还可以使用 Unicode 值:
PS1=$'\u2622 '
这样,即使本地字符集/编码不是 utf-8,它也会正确扩展/显示(或者至少不会那么糟糕)(否则会导致 bash 崩溃或输出垃圾,因为我认为我发现了一个错误那里)。