我猜你来自 Windows 背景。所以我将对比它们(我对 Linux 也很陌生)。我发现一个用户对我的评论的回复,对弄清楚事情很有用。
在 Windows 中,变量可以是永久的,也可以不是。 环境变量一词包括在 cmd shell 中使用 SET 命令设置的变量,以及当变量在 Windows GUI 中设置时,因此在注册表中设置时,并在新的 cmd 窗口中可见。
例如,the documentation for the set command in Windows“显示、设置或删除环境变量。不带参数使用时,set 显示当前环境设置。”
在 Linux 中,set 不显示环境变量。它显示了它不调用/引用为环境变量的 shell 变量。此外,Linux 不使用 set 来设置变量(除了位置参数和 shell 选项,我在最后解释为注释),只显示它们,即使这样也只显示 shell 变量。 Windows 使用 set 进行设置和显示,例如,set a=5,但 Linux 没有。
在 Linux 中,我想您可以编写一个脚本来设置启动时的变量,例如 /etc/profile 或 /etc/.bashrc,但除此之外,它们不是永久性的。它们存储在 RAM 中。
在 Linux 中,shell 变量和环境变量是有区别的。在 Linux 中,shell 变量仅在当前 shell 中,环境变量在该 shell 和所有子 shell 中。
您可以使用 set 命令查看 shell 变量(但请注意,与 Windows 不同,Linux 中的变量不是使用 set 命令设置的)。
set -o posix; set(先做一次set -o posix,有助于不显示太多不必要的东西)。所以set 显示shell 变量。
您可以使用env 命令查看环境变量。
Shell 变量设置为例如 a = 5。
环境变量用export设置。导出还设置了 shell 变量。
这里你看到用zzz = 5设置的shell变量zzz,运行set时看到它显示,但它没有显示为环境变量。
这里我们看到yyy 设置了导出,所以它是一个环境变量。并查看它在 shell 变量和环境变量下的显示:
$ zzz=5
$ set | grep zzz
zzz=5
$ env | grep zzz
$ export yyy=5
$ set | grep yyy
yyy=5
$ env | grep yyy
yyy=5
$
其他有用的 QnAs:
注意:有一点需要详细说明并且对我所写的内容有所纠正,那就是,在 Linux bash 中,'set' 可用于设置“位置参数”和“shell 选项/属性”,以及从技术上讲,这两个都是变量,尽管man pages 可能不会这样描述它们。
但是,如前所述,set 不会设置 shell 变量或环境变量)。如果您执行set asdf,那么它会将$1 设置为asdf,如果您执行echo $1,您会看到asdf。
如果你做set a=5,它不会设置变量a,等于5。它会设置位置参数$1等于字符串“a=5”。因此,如果您曾经在 Linux 中看到 set a=5,这可能是一个错误,除非有人真的想要字符串 a=5,在 $1 中。
Linux 的set 可以设置的另一件事是shell 选项/属性。如果你确实 set -o 你会看到它们的列表。例如,您可以执行 set -o verbose, off 来打开详细信息(顺便说一下,默认值恰好是关闭的,但这对此没有影响)。或者您可以通过set +o verbose 关闭详细信息。 Windows 的 set 命令没有这种用法。