Bash 中的 BEL / Zsh PROMPT

BEL in Bash / Zsh PROMPT

我的 .zshrc 中确实有以下配置:

BEL=$(tput bel)
PROMPT+='%(?::$BEL)'

在某些环境中 works/worked(总是在 Windows 上使用 Cygwin),但目前不再如此。

(相同的行为:不工作,在 Bash 上 Ubuntu 上 Windows。)

怎么了?

zsh 中,与 bash 不同,如果设置了 PROMPT_SUBST 选项,提示中嵌入的参数扩展只会在显示提示时展开。

%(...) 是一个 zsh 特定的转义序列,而 PROMPT 本身是一个 zsh 特定的名称,所以这在 [=13= 中不起作用],这需要像

这样的东西
PS1+='$(if test $? -ne 0; then tput bel; fi)'

(顺便说一句,如果启用了 PROMPT_SUBST,它也可以在 zsh 中工作。如果当前 shell 是,则有条件地启用它的命令实际上是, zsh,可能是

if [ -z "$ZSH_VERSION" ]; then
  setopt PROMPT_SUBST
fi