如何将函数/变量保存在我的zshrc本地?

Dea*_*ean 26 zsh zshrc

我在my中声明的任何变量zshrc在shell中都可用作环境变量.我不希望这种情况发生.

我尝试将变量放在一个函数中并将它们设置为本地,但是该函数在该函数之外可用zshrc.

我怎样才能让我的zshrc中发生的事情停留在我的zshrc中

qqx*_*qqx 31

如果您使用的是最新版本的zsh,则可以使用匿名函数:

function () {
  local xyz=abc
  # whatever
}
Run Code Online (Sandbox Code Playgroud)

该函数将自动执行然后丢弃,它仅用于作用域.

这适用于任何源文件,而不仅仅是zshrc.

  • 这涵盖了变量,但是如何声明局部函数呢? (3认同)

ZyX*_*ZyX 22

它们是可用的,但它们不会被导出,因此从命令行启动的脚本不会获取这些变量.如果你.zshrc看起来像

function zshrc()
{
    local VAR=1
    # Do stuff
}
zshrc
Run Code Online (Sandbox Code Playgroud)

然后你再也不想再启动zshrc功能了

unfunction zshrc
Run Code Online (Sandbox Code Playgroud)

然后.

  • 最好使用匿名函数,如 qqx 的答案所示。那么你就不需要`unfunction`。 (3认同)

jas*_*ard 7

如果您没有将单词附加local到变量,它将保留,直到您执行以下操作之一:

  1. 打开一个新的终端窗口.
  2. 运行exec zshexec bash取决于您的shell.这只是清除了未分配单词的本地变量local.

避免这样做

method_name(){
  a=11
  echo $a
}
Run Code Online (Sandbox Code Playgroud)

正确的例子

method_name(){
  local a=11
  echo $a
}
Run Code Online (Sandbox Code Playgroud)

此变量的作用域为函数名称method_name,仅在调用时(而不是之后)在函数内部可用.

如果要直接访问该局部变量,可以这样设置

local z=11

并以这种方式称呼它

echo $z

此外,环境变量与局部变量不同

根据您的外壳和需求,你可以使用.bash_profile.bashrc.zshrc等存储功能和别名.

有关环境变量及其各自shell的更多信息,请查看此参考

另请阅读此内容以了解如何使用shell扩展在命令行上设置环境变量

您可以使用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

unset B

请注意$,取消设置时没有.

从命令行设置环境变量

export BLABLA="environment variable set from the command line, saved in file for later use"

检查您要发送给它的文件,它可能无法在新行上启动,它可能已连接到您的最后一行,这是其他功能,别名或其他.

这不是一个完全全面的答案,但它是朝着正确方向迈出的一大步.它显示了如何设置,使用和删除终端shell中的作用域.

  • 虽然正确,但这对回答 OP 的问题没有帮助。 (3认同)