74

我有两个脚本 1.sh 和 2.sh。

1.sh如下:

#!/bin/sh
variable="thisisit"
export variable

2.sh如下:

#!/bin/sh
echo $variable

根据我阅读的内容,这样做(导出)可以从另一个 shell 脚本访问变量。但这在我的脚本中不起作用。有人可以帮忙吗。提前致谢。

4

2 回答 2

156

如果你正在执行你的文件sh 1.sh./1.sh那么你正在一个子shell中执行它。

如果您希望在当前 shell 中进行更改,您可以执行以下操作:

. 1.sh
# OR
source 1.sh

请考虑通过参考文档

“当使用source[或.] 运行脚本时,它在现有的 shell 中运行,脚本创建或修改的任何变量在脚本完成后仍然可用。相反,如果脚本运行为filename,则单独的子 shell(带有完全独立的变量集)将被生成以运行脚本。”

于 2012-05-28T08:54:17.537 回答
10

export将变量放在执行 shell 的环境中,以便将其传递给脚本执行的进程,但不会传递给调用脚本的进程或任何其他进程。尝试执行

#!/bin/sh
FOO=bar
env | grep '^FOO='

#!/bin/sh
FOO=bar
export FOO
env | grep '^FOO='

看看效果export

要从 to 获取变量1.sh2.sh请调用2.shfrom1.sh或 import 1.shin 2.sh

#!/bin/sh
. ./1.sh
echo $variable
于 2012-05-28T08:52:42.470 回答