39

我在其中声明的任何变量zshrc都可以在 shell 中作为环境变量使用。我不希望这种情况发生。

我尝试将变量放在函数中并将它们设置为本地,但随后该函数在zshrc.

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

4

4 回答 4

44

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

function () {
  local xyz=abc
  # whatever
}

该函数将被自动执行,然后被丢弃,它仅用于范围界定目的。

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

于 2012-12-02T15:35:20.603 回答
32

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

function zshrc()
{
    local VAR=1
    # Do stuff
}
zshrc

然后你就再也不想启动zshrc功能了,你可以这样做

unfunction zshrc

然后。

于 2012-12-02T11:27:03.863 回答
10

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

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

避免这种情况

method_name(){
  a=11
  echo $a
}

正确的例子

method_name(){
  local a=11
  echo $a
}

此变量的范围为函数名称method_name,并且仅在调用时(而不是之后)在函数内部可用。

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

local z=11

并这样称呼它

echo $z

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

根据您的 shell 和需要,您可以使用.bash_profileor.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"

检查您要发送到的文件,它可能不会从新行开始,它可能已连接到您的最后一行,该行是其他函数、别名或其他。

这不是一个完全全面的答案,但它是朝着正确方向迈出的一大步。它显示了如何设置、使用和删除终端外壳中的范围。

于 2017-02-07T03:34:42.757 回答
1

显然有一个 bash 约定用双下划线命名“私有”函数..当然它们实际上并不是私有的。我在我的 .zshrc 中使用了这个约定。

function __comment()
{
  curr=`pwd`
  echo "$curr $*"
}

__comment 'Here is a Comment'
于 2021-05-01T07:09:02.467 回答