如何使变量可以从脚本访问

如何使变量可以从脚本访问

在 Ubuntu 16.04 中,我执行了一个脚本(脚本 1),该脚本本身执行另外两个脚本(脚本 2 和脚本 3)。

${x}脚本 3 包含对脚本 2 ( ) 中已声明的变量的变量替换 ( ) x=y

当然,在执行脚本 3 之前,我确保执行source脚本 2,以便将来在脚本 3 或其他地方允许变量替换。


问题是,当我执行脚本 3(通过脚本 1)时,变量替换失败并且结果不完美,但在手动执行中它成功了。


为什么通过脚本1执行脚本3时变量替换失败,而手动执行却成功,如何确保确实会发生?

如果sourcing脚本 2 还不够,那么我不知道还不够。

答案1

这是一个变量范围问题,与脚本是从命令行手动执行还是由另一个脚本执行完全无关。

未导出到环境的 Shell 变量对子进程(包括子 shell)不可见

script2如果您在 内部进行采购script3,那么script3将看到 中定义的所有变量,script2因为它们都发生在 的范围内script3。如果您同时对script2script3inside进行采购,则结果几乎相同script1(但在这种情况下,一切都发生在 的范围内script1

但是,如果您在script2内部采购script1然后执行(不是source) script3from script1,那么script3只会看到定义或更改的变量(script2如果它们碰巧被导出)。

变量何时何地导出并不重要,只要它发生就行 script3被执行。变量可以在script1或 中导出script2,甚至可以在开始执行的父 shell(或其 .profile/.bashrc/etc)中导出script1

相关内容