![如何在 Bash 提示符中的“$”或“\$”后立即插入变量?](https://linux22.com/image/811877/%E5%A6%82%E4%BD%95%E5%9C%A8%20Bash%20%E6%8F%90%E7%A4%BA%E7%AC%A6%E4%B8%AD%E7%9A%84%E2%80%9C%24%E2%80%9D%E6%88%96%E2%80%9C%5C%24%E2%80%9D%E5%90%8E%E7%AB%8B%E5%8D%B3%E6%8F%92%E5%85%A5%E5%8F%98%E9%87%8F%EF%BC%9F.png)
我正在使用这个功能:
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