我在zshrc
中声明的任何变量在shell中都可用作环境变量。我不希望这种情况发生。
我尝试将变量放在函数中并将它们设置为本地变量,但是该函数在zshrc
之外可用。
我怎样才能这样做我的zshrc中发生的事情会留在我的zshrc 中?
答案 0 :(得分:30)
如果您使用的是最新版本的zsh,则可以使用匿名函数:
function () {
local xyz=abc
# whatever
}
该功能将自动执行然后丢弃,它仅用于作用范围。
这适用于任何源文件,而不仅仅是zshrc。
答案 1 :(得分:20)
它们可用,但它们不会导出,因此从命令行启动的脚本不会获取这些变量。如果您的.zshrc
看起来像
function zshrc()
{
local VAR=1
# Do stuff
}
zshrc
然后您再也不想再启动zshrc
功能了
unfunction zshrc
之后。
答案 2 :(得分:7)
如果您没有将单词local
附加到变量,它将保留,直到您执行以下操作之一:
exec zsh
或exec bash
。这只是清除了未使用单词local
分配的本地变量。method_name(){
a=11
echo $a
}
method_name(){
local a=11
echo $a
}
此变量的作用域为函数名method_name
,仅在调用时(而不是之后)在函数内部可用。
local z=11
echo $z
根据您的外壳和需求,您可以使用.bash_profile
或.bashrc
或.zshrc
等来存储功能和别名。
View this reference for more on environment variables and their respective shells
您可以使用env
或printenv
惯例是使用大写
export A=11
或export B="11 is part of this string"
假设您已经打开了一个新的终端窗口或源.zshrc或.bashrc或者您正在使用的任何一个,您现在可以使用此环境变量,直到您关闭终端会话。注意:设置时不要使用$,但在引用变量时请使用$。
echo "A is equal to: $A and that is pretty nice"
echo "$A"
source ~/path/to/file/filename
source ~/.bash_profile
使用上面的代码,但将其放在〜/ .bash_profile或〜/ .zshrc或其他相应的文件中。保存文件并将其获取。
export B="11 is part of this string"
env
要删除该环境变量,请将其从文件中删除,然后再次获取该文件。
unset B
请注意,取消设置时没有$
。
export BLABLA="environment variable set from the command line, saved in file for later use"
检查您要发送给它的文件,它可能无法从新行开始,它可能已连接到您的最后一行,这是其他功能,别名或其他。
这不是一个完全全面的答案,但它是朝着正确方向迈出的一大步。它显示了如何设置,使用和删除终端shell中的作用域。
答案 3 :(得分:0)
显然有一个 bash 约定用双下划线命名“私有”函数......当然它们实际上并不是私有的。我在我的 .zshrc 中使用了这个约定。
function __comment()
{
curr=`pwd`
echo "$curr $*"
}
__comment 'Here is a Comment'