所以我想说我在.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中使用后如何取消它们?这里的最佳做法是什么?
谢谢,凯文
使用内置功能取消设置参数 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} $ '
这将$RED
在PROMPT
定义时替换,并且仅评估${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 <" > | <