在shell编程学习中,关于变量的赋值问题

问题背景:我在Linux的超级终端中先创建一个shell文件并在文件中对name赋值,然后用bash去执行这个文件,最后为什么不能在指令窗口直接输出name这个变量的值。只有用source执行文件后,才能在指令窗口输出赋值后的变量

[ghp@localhost ~]$ echo $name

[ghp@localhost ~]$ vim name.sh
[ghp@localhost ~]$ cat name.sh
name="zhangsan"
[ghp@localhost ~]$ sh name.sh    /*用bash解释器执行脚本后仍然输出不了name变量的值*/
[ghp@localhost ~]$ echo $name

[ghp@localhost ~]$ source name.sh  /*但是用source执行脚本却可以输出name变量的值*/
[ghp@localhost ~]$ echo $name
zhangsan
[ghp@localhost ~]$ 


想要的答案: 其中的详细原因,请求您的不吝赐教,在此万分感谢

因为你修改后,没有去执行,需要刷新修改后的文件,使其在当前shell进程中生效。
source命令用法:

source FileName

作用:在当前bash环境下读取并执行FileName中的命令。
source(或点)命令通常用于重新执行刚修改的初始化文档。

哈哈,我懂了。sh/bash 执行脚本,会生成一个新的进程,改变变量值的过程是发生在新的进程中的,所以在当前进程中的变量值并未改变;而source执行脚本,是在当前进程中执行,改变变量的过程是发生在当前进程中的,所以执行完name.sh后,当前进程中变量的值发生了改变。