shell 在另一个脚本中调用脚本时,bash使用动态还是静态作用域

avwztpqn  于 2022-11-16  发布在  Shell
关注(0)|答案(1)|浏览(173)

如果您有脚本:test1.sh

var="first"
echo $var

和test2.sh

var="second"
sh ./test1.sh
echo $var

如果test2.shbash使用动态作用域和静态作用域,执行www.example.com的预期输出是什么?
据我所知,bash使用动态作用域,因此我希望在运行www.example.com时test2.sh,$var被设置为“second”,而在test1.sh内部运行test2.sh时,var被设置为“first”。因此,预期输出将是:第一个先
但是,我得到的输出是:第一秒
这说明这是静态作用域?除非我的理解有误

6vl6ewon

6vl6ewon1#

在另一个脚本中调用脚本时,bash使用动态还是静态作用域
shell中没有“动态”也没有“静态”作用域,在Bash中只有函数“作用域”,但在这里并不相关。
有进程,进程是独立的实体,有独立的内存空间,就像firefox不能改变chrome一样,子进程也不能改变父进程。
的预期输出是什么
输出为first secondsh运行一个名为sh的新流程。子流程不能影响父流程变量。
请注意,以命令启动的子行程序只会继承汇出的变数。如果var未汇出,则会在test1.sh启动时取消设定。

相关问题