我正在使用这个功能:
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