Bash 提示 - 多字节 unicode 字符的八进制表示适用于提示,但在手动运行时不起作用(同一脚本)?

Bash 提示 - 多字节 unicode 字符的八进制表示适用于提示,但在手动运行时不起作用(同一脚本)?

给定 shell 脚本 myPrompt.sh:

#!/bin/bash

printf "Llama \001\360\002\001\237\002\001\255\002\254 Llama $> "

...并且 bash 提示符配置为运行上面的脚本:

alias myPrompt="/home/you/myPrompt.sh"
PS1="\$(myPrompt)"

在上述场景中,该函数运行并生成带有 [ 的输出

答案1

shell 在处理提示时使用一些序列(如\[和 )来执行诸如注释提示的零宽度部分之类的操作,但这些字符在直接打印时不会以这种方式解释。\]我很惊讶 和 的\001工作\002方式你注意到 - 但这可能与你使用的任何字符编码有更多关系?

无论如何,要打印某些内容并在不设置提示符的情况下查看它在提示符上的样子,在 bash 中,您可以P在变量扩展中使用 (for Prompt) 运算符:

SOME_PROMPT_STRING="\u@\h:\W\$"
echo "${SOME_PROMPT_STRING@P}"

相关内容