bash 中“a=b”和“export a=b”的区别

bash 中“a=b”和“export a=b”的区别

以下两者有何区别:

a=b

export a=b

在 bash 中?

我知道它们都定义了环境变量,但我不完全了解它们之间的区别。

答案1

export将变量传播到子进程。

例如,如果你这样做

FOO=bar

然后检查 FOO 的子进程将找不到该变量,而

export FOO=bar

将允许子进程找到它。

但如果FOO已经被定义为环境变量,那么FOO=bar将修改该环境变量的值。

例如:

FOO=one     # Not an environment variable
export FOO  # Now FOO is an environment variable
FOO=two     # Update the environment variable, so sub processes will see $FOO = "two"

较旧的 shell 不支持该export FOO=bar语法;您必须写FOO=bar; export FOO

答案2

如果您不使用export,则您没有定义环境变量;只是一个 shell 变量。

Shell 变量仅对 shell 进程可用;环境变量可用于任何后续进程,而不仅仅是 shell。

答案3

另外,如果您希望在不使用 export 的情况下让变量可供调用 shell 使用,您可以执行以下操作:

文件 a.ksh 是 -

#!/bin/ksh
FOO=bar

在提示符下,运行

> . a.ksh

这将在同一个 shell 中运行命令,并且 $FOO 将可用。

然而,

> a.ksh

将使 $FOO 仅在 a.ksh 中可用,调用 a.ksh 后它将不存在。

答案4

除了已经回答的问题之外,这两个语句不一定定义(即创建与设置)环境变量,因为“a”可能已经作为 shell 或环境变量存在。

在后一种情况下,两个陈述是严格等效的。

相关内容