为什么库函数中的 `print -P "%%"` 行为不同?

Why is `print -P "%%"` behaviour different within library function?

在我的终端上:

$ print -P "%%"
%

Spaceship prompt 函数中的等效代码:

spaceship_extension() {
  unset PROMPT_PERCENT 
  unset PROMPT_SUBST
  print -P "00%%\n"

  set PROMPT_PERCENT 
  unset PROMPT_SUBST
  print -P "01%%\n"
  
  unset PROMPT_PERCENT 
  set PROMPT_SUBST
  print -P "10%%\n"
  
  set PROMPT_PERCENT
  set PROMPT_SUBST
  print -P "11%%\n"
}

输出:

00
01
10
11

根据 Prompt Expansion man page,这些是唯一相关的环境变量。有人知道这里发生了什么吗?

编辑:删除了避免设置和重置环境变量的 exports

第一个问题是export对这两个选项都没有影响;在每种情况下,您只是在一组名称上设置导出属性。

其次,setunset 作用于名称,而不是 shell 选项。你想要 setoptunsetopt.

% setopt PROMPT_PERCENT
% print -P '00%%\n'
00%

% unsetopt PROMPT_PERCENT
% print -P '00%%\n'
00%%

(实际上,取消设置 PROMPT_PERCENT 可能会影响您的实际提示;我在这里使用 % 作为提示的占位符,而不是您取消设置后提示的准确表示选项。)