Bash提示符无法识别变量

Bash提示符无法识别变量,bash,terminal,iterm,Bash,Terminal,Iterm,我正在定制bash提示符(我在OS X Lion上使用iTerm),并尝试了以下方法: PS1='\n[\u]-> ' 只是为了简单起见,但在重新加载我的~/.bash_配置文件后,我的提示现在显示: \n[\u]-> 而不是我所期望的(一个新行,后跟我的用户名) 有什么想法吗?尝试用双引号替换单引号,即PS1=“\n[\u]>”注意到提示中的单引号了吗?对单引号和双引号的处理方式不同。使用双引号允许shell展开特殊字符 另外,您是否设置了promptvars集?如何调用she

我正在定制bash提示符(我在OS X Lion上使用iTerm),并尝试了以下方法:

PS1='\n[\u]-> '
只是为了简单起见,但在重新加载我的
~/.bash_配置文件
后,我的提示现在显示:

\n[\u]->
而不是我所期望的(一个新行,后跟我的用户名)


有什么想法吗?

尝试用双引号替换单引号,即
PS1=“\n[\u]>”
注意到提示中的单引号了吗?对单引号和双引号的处理方式不同。使用双引号允许shell展开特殊字符


另外,您是否设置了
promptvars
集?

如何调用shell?如果是as
sh
,或者可能是其他方式,则不会对其进行解释。尝试
echo$0

在这种情况下不太可能。这不是经典变量,而是“特殊”变量。在我尝试之前,我还以为是这样。不,变量设置为单或双,直到即将打印时才进行解释。@Kevin我知道解释发生在打印时。但是在BASH手册页中,提示符确实经过了引号扩展。最终,使用
'
vs
''
设置没有效果,因为它没有扩展。自己试试看:
PS1=“\n>”;echo$PS1;PS1='\n>';echo$PS1
术语点:这些不是变量。它们不会通过任何shell扩展阶段进行扩展。每次显示提示时,都会解释这些提示,然后在显示最终提示之前执行扩展阶段。(bash手册页将这些字符描述为“反斜杠转义特殊字符”。)。。。好吧,好吧,我明白了<代码>$0是给懒惰的人的。这个周末我玩了zsh,但我只想用bash。我想这是我的问题。当我运行echo$0时,它返回了
-zsh
@STATUS\u ACCESS\u DENIED实际上,我进行了测试,他们给出了不同的结果<代码>$0是
sh
$SHELL
/bin/bash
@cnnr是的,就这样。我不在我的Mac电脑上,所以我不知道如何更改它,但它应该与您最初将其更改为
zsh
的方式相同。@STATUS\u ACCESS\u DENIED:当然,但我们专门讨论了交互式SHELL中
$0
$SHELL
之间的区别(您自己写的,“
$0
是当前shell”,不区分运行脚本的子shell的情况)。我只是想对特别提到的行为提供更好的解释,而没有解释Unix内核是如何工作的。-)不,一旦设置了变量,它就无关紧要了,并且在编写提示之前不会解释转义。请尝试
chsh
,也可以在Mac上工作。