所以,让我说我在.zshrc中设置了一堆变量:
function print_color () {
echo -ne "%{\e[38;05;${1}m%}";
}
# color guide: http://misc.flogisoft.com/_media/bash/colors_format/256-colors.sh.png
RED=`print_color 160`
DEFAULT="%{$fg[default]%}"
PROMPT='$RED%${DEFAULT} $ '
一旦我实际运行命令
,问题就是这些问题仍然存在$ echo $RED
%{%} # With colors, etc.
在我的.zshrc中使用后如何取消设置?这里的最佳做法是什么?
谢谢, 凯文
答案 0 :(得分:23)
使用内置unset
unset PARAMETER
取消设置PARAMETER
。只要您不再需要PARAMETER
,文件末尾或中间的任何位置,就可以执行此操作。
“最佳实践”在很大程度上取决于用例:
~/.zshrc
的底部附近取消它们。 此外,如果您只需要在函数内部使用参数,则可以使用local
声明它
function foo () {
local PARAMETER
# [...]
}
只有unset
才能使用此功能。
话虽如此,在这种情况下,您实际上需要在运行的shell中使用RED
,因为每次评估提示时都需要它(每次打印前都需要)。这是因为PROMPT在单引号中定义(并且设置了shell选项PROMPT_SUBST
,请参阅setopt | grep promptsubst
的输出。)
如果您不打算在运行时更改RED
,请在定义PROMPT时将其放在双引号中:
PROMPT="$RED"'%${DEFAULT} $ '
这将在定义$RED
时替换PROMPT
,并且每次${DEFAULT}
评估PROMPT
时都会替换unset RED
。
之后你就可以$
。请注意,RED
之前必须没有RED
,否则shell会将其替换为% FOO=BAR ; BAR=X
% echo "> $FOO | $BAR <"
> BAR | X <
% unset $FOO
% echo "> $FOO | $BAR <"
> BAR | <
% unset FOO
% echo "> $FOO | $BAR <"
> | <
的值,并尝试取消设置名为value的参数:
{{1}}
答案 1 :(得分:3)
一个可能比取消设置变量更好的解决方案是在函数中使它们本地化,这样如果它们在shell启动时处于环境中,那么就不会丢失:
putprompt()
{
local RED=`print_color 160` DEFAULT="%{$fg[default]%}"
PROMPT="$RED%${DEFAULT} \$ "
}
然后只执行putprompt
函数。
答案 2 :(得分:0)
只需将unset RED
放在.zshrc的末尾。