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

Ada*_*tan 73 bash shell environment-variables process

有什么区别:

a=b
Run Code Online (Sandbox Code Playgroud)

export a=b
Run Code Online (Sandbox Code Playgroud)

在 bash 中?

我知道他们都定义了环境变量,但我不完全理解其中的区别。

Mik*_*aid 76

export 将变量传播到子进程。

例如,如果你做了

FOO=bar
Run Code Online (Sandbox Code Playgroud)

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

export FOO=bar
Run Code Online (Sandbox Code Playgroud)

将允许子进程找到它。

但是,如果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"
Run Code Online (Sandbox Code Playgroud)

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

  • 实际上,如果您不使用“`export`”,那么您就不是在定义环境变量,而只是定义了一个 shell 变量。Shell变量只对shell进程可用;环境变量可用于*任何*后续进程,而不仅仅是shell。此外,子shell 是包含在括号内的命令,它们确实可以访问shell 变量,而您所谈论的是恰好是shell 的子进程。 (49认同)
  • 什么是“子流程”?子流程的一些常见示例有哪些? (3认同)

wfa*_*ulk 37

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

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