在 Bash 提示(PS1 变量)中,我正在调用一个函数来潜在地向提示添加文本: export PS1="\u@\h \$(my_function) \$ "
但是,提示中的函数包含 ANSI 颜色代码,这些代码会根据函数的输出(有时为红色,有时为绿色)而变化。将 " \["添加到 PS1 变量应该将这些代码转义为非打印,但如果我echo在函数中执行 an ,则 " \[" 会在提示中逐字打印。
如何从函数中转义这些 ANSI 颜色代码以在 bash 提示中使用?
use*_*686 39
该readline的图书馆接受\001和\002(ASCII SOH和STX)为不可打印的文字分隔符。这些也适用于任何使用readline 的应用程序。
从lib/readline/display.c:243在bash的源代码:
243 /* Current implementation:
244 \001 (^A) start non-visible characters
245 \002 (^B) end non-visible characters
246 all characters except \001 and \002 (following a \001) are copied to
247 the returned string; all characters except those between \001 and
248 \002 are assumed to be `visible'. */
Run Code Online (Sandbox Code Playgroud)
在bash的特异性\[和\]其实都是翻译成\001和\002在y.tab.c:7640。
注意:如果您使用bash的printfor echo -e,并且如果您的文本具有\001或\002紧接在数字之前,您将遇到一个bash错误,导致它在处理八进制转义时吃掉一位数字太多——也就是说,\00142将被解释为八进制014(后跟 ASCII“2”),而不是正确的八进制 01(后跟 ASCII“42”)。出于这个原因,用十六进制版本\x01和\x02替代。
| 归档时间: |
|
| 查看次数: |
7329 次 |
| 最近记录: |