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

 伊华Zhu 发布于 2022-12-31 16:30

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

谢谢,凯文

1 个回答
  • 使用内置功能取消设置参数 unset

    unset PARAMETER
    

    取消PARAMETER.这可以在您不再需要时PARAMETER,在文件末尾或中间的任何位置完成.

    "最佳实践"在很大程度上取决于用例:

    对于颜色,您可能希望它们从上到下可用,以便您可以在整个文件中使用相同的颜色.因此,您可能希望在底部附近取消它们~/.zshrc.

    如果您只是为几行代码存储一些输出,而在文件的任何其他部分中不需要这些输出,则可以在最后一次使用之后或在相关代码块结束时立即取消设置.

    此外,如果仅在函数内部需要参数,则可以使用该参数进行声明 local

    function foo () {
        local PARAMETER
        # [...]
    }
    

    然后它将仅在此功能内可用而不需要unset.


    话虽如此,在这种情况下,您实际上需要RED在运行的shell中可用,因为每次评估提示时都需要它(每次打印前都需要).这是因为PROMPT在单引号中定义(并且PROMPT_SUBST设置了shell选项,请参阅输出setopt | grep promptsubst).

    如果您不打算RED在运行时更改,请在定义PROMPT时将其放在双引号中:

    PROMPT="$RED"'%${DEFAULT} $ '
    

    这将$REDPROMPT定义时替换,并且仅评估${DEFAULT}每次PROMPT.

    之后你可以做到unset RED.请注意,$之前必须没有RED,否则shell会用值替换它,RED并尝试取消设置一个名为value的参数:

    % FOO=BAR ; BAR=X
    % echo "> $FOO | $BAR <"
    > BAR | X <
    % unset $FOO
    % echo "> $FOO | $BAR <"
    > BAR |  <
    % unset FOO
    % echo "> $FOO | $BAR <"
    >  |  <
    

    2022-12-31 16:32 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有