如何在.zshrc中使用后取消设置变量?

时间:2014-07-29 16:32:47

标签: variables zsh

所以,让我说我在.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中使用后如何取消设置?这里的最佳做法是什么?

谢谢, 凯文

3 个答案:

答案 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的末尾。