如何在 Bash 提示符中的“$”或“\$”后立即插入变量?

如何在 Bash 提示符中的“$”或“\$”后立即插入变量?

我正在使用这个功能:

function test(){
  local var="hello"
  PS1="\u\$$var"
}

我尝试从该函数获取的输出是john$hello

但我得到的只是john

如果我在前面添加一个空格$var,那么我就会得到关闭我想要的 - 但我不想要那里的空间。

如果没有那个空间我还能做我想做的事吗?

答案1

由于您在设置时使用了双引号PS1,因此变量替换在您分配给变量的位置进行评估。所以你最终设置PS1\u$hello。shell 在显示提示之前会扩展变量,由于您没有任何名为的变量hello,因此提示的该部分将扩展为空字符串。

如果您PS1使用单引号进行设置,则此时不会执行变量替换。$var但这会导致在显示提示时对该部分进行评估,这意味着它不会获取您在 shell 函数中定义的局部变量。

应该与 shell 函数中的局部变量一起使用的第三个选项是转义元字符:

PS1="\u\\\$$var"

这应该会导致 PS1 被设置为。在这种情况下,\u\$hello当变量发生变化时,提示的结尾不会改变。var

相关内容