在 ZSH precmd 中设置变量并在提示中引用它们

Kev*_*rke 6 prompt zsh

有没有办法在precmdzsh的函数中设置变量,然后在提示中echo它们?

就像是

function precmd {
   GREETING='Hi Kevin!';
}

PROMPT="$GREETING";
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 5

把它放在你的.zshrc

setopt prompt_subst
PROMPT='$GREETING'
Run Code Online (Sandbox Code Playgroud)

然后$PROMPT每次显示时都会进行参数扩展(以及它的兄弟命令替换和算术扩展)。注意正确引用从外部来源获得的任何内容。还要注意,$扩展的结果将进行%扩展(即提示转义序列可以出现在 中$GREETING)。

另一种方法是在 中重置PROMPT变量本身precmd,但这使得在特定 shell 实例中自定义提示变得更加困难。

  • 事实证明,使用双引号存在问题。一旦我在 PROMPT 周围更改为单引号,我就可以正常更新该函数。 (3认同)
  • 双引号将在赋值时扩展 $GREETING,即 PROMPT 将设置为固定字符串。使用单引号,PROMPT 将包含 _string_ $GREETING,由于 prompt_subst,它将在每个新行上重新评估为 $GREETING 的 _value_ (2认同)