为什么库函数中的 `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
对这两个选项都没有影响;在每种情况下,您只是在一组名称上设置导出属性。
其次,set
和 unset
作用于名称,而不是 shell 选项。你想要 setopt
和 unsetopt
.
% setopt PROMPT_PERCENT
% print -P '00%%\n'
00%
% unsetopt PROMPT_PERCENT
% print -P '00%%\n'
00%%
(实际上,取消设置 PROMPT_PERCENT
可能会影响您的实际提示;我在这里使用 %
作为提示的占位符,而不是您取消设置后提示的准确表示选项。)
在我的终端上:
$ 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
对这两个选项都没有影响;在每种情况下,您只是在一组名称上设置导出属性。
其次,set
和 unset
作用于名称,而不是 shell 选项。你想要 setopt
和 unsetopt
.
% setopt PROMPT_PERCENT
% print -P '00%%\n'
00%
% unsetopt PROMPT_PERCENT
% print -P '00%%\n'
00%%
(实际上,取消设置 PROMPT_PERCENT
可能会影响您的实际提示;我在这里使用 %
作为提示的占位符,而不是您取消设置后提示的准确表示选项。)