以下两者有何区别:
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 或环境变量存在。
在后一种情况下,两个陈述是严格等效的。