【问题标题】:How to echo in bash the backslash escaped special characters used in PS1?如何在 bash 中回显 PS1 中使用的反斜杠转义特殊字符?
【发布时间】:2013-02-01 03:09:35
【问题描述】:

我想查看在设置$PS1 时使用的转义特殊字符的输出。例如,在 PS1 中放置\u 会输出当前用户的用户名。

所以本质上:

omar @ ~ > echo -e '\u'

预期:

omar

实际输出:

\u

【问题讨论】:

标签: bash


【解决方案1】:

您可以使用 @P 运算符进行参数扩展,如下所示:

prompt="\u"; echo ${prompt@P}

从 Bash 4.4 开始,您可以在 Parameter expansion 中使用 @P 运算符:

${parameter@operator}
扩展要么是参数值的转换,要么是有关参数本身的信息,具体取决于运算符的值。每个运算符都是一个字母:

@P 展开是一个字符串,它是把参数的值展开的结果,就好像它是一个提示一样

这里有一些常见的special characters available to the PS1 command

下面列出了提示变量PS0、PS1、PS2、PS4中可以出现的特殊字符

\a 铃铛字符
\d 日期,采用“工作日月份日期”格式(例如,“5 月 26 日星期二”)
\e 转义字符
\H 主机名
\u 当前用户的用户名
\w当前工作目录

进一步阅读

【讨论】:

  • 有趣。我之前没有使用过${foo@P} 提示扩展(从来没有需要)。值得庆幸的是,Bash 5 似乎没有更改或添加到参数扩展中。 Bash-5.0 release available
【解决方案2】:

这是一种可用于显示转义字符值的方法。

下面定义的函数会将您当前的 PS1 更改为给定的字符串。输入命令后就可以看到输出了。

  1. 将您当前的 PS1 存储在一个变量中

    > save=$PS1

  2. 创建重置函数

    > function reset { PS1=$save; }

  3. 创建打印函数

    > function omar { PS1="\\$1 "; }

  4. 如下使用

    > omar u: 你的命令提示符就是你的用户名

    omar >

    > omar @:您的命令提示符将是当前时间,格式为上午/下午 12 小时

    11:19 PM >

    > omar h:您的命令提示符将是主机名,直到第一个`。'

    omar-Laptop >

    等等……

  5. 您可以通过调用reset 或重新启动终端来重置您的PS1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    相关资源
    最近更新 更多