linux 为什么shell不能获取在子shell中运行的脚本导出的变量?

bq9c1y66  于 2022-12-22  发布在  Linux
关注(0)|答案(2)|浏览(175)

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

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

2.sh 如下:

#!/bin/sh
echo $variable

根据我所读到的,这样做(导出)可以从一个shell脚本访问另一个shell脚本中的变量,但这在我的脚本中不起作用。

b4wnujal

b4wnujal1#

如果你正在执行sh 1.sh./1.sh这样的文件,那么你是在一个子shell中执行它。
如果希望在当前Shell中进行更改,可以执行以下操作:

. 1.sh
# OR
source 1.sh

请考虑通过reference-documentation

  • “当使用source [或. ]运行脚本时,脚本在现有shell中运行,脚本创建或修改的任何变量在脚本完成后仍将可用。相反,如果脚本仅作为filename运行,则将生成单独的子shell(具有完全单独的变量集)来运行脚本。"*
kdfy810k

kdfy810k2#

export在执行shell的环境中放置一个变量,以便将其传递给脚本执行的进程,而不是调用脚本的进程或任何其他进程。

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

以及

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

来观察export的影响。
要获取从1.sh2.sh的变量,请从1.sh调用2.sh,或将1.sh导入2.sh

#!/bin/sh
. ./1.sh
echo $variable

相关问题