版权声明:本文为博主hanchao5272原创文章,转载请注明来源,并留下原文链接地址,谢谢! https://blog.csdn.net/hanchao5272/article/details/86430223
系列目录与参考文献传送门: shell入门学习笔记-序章
作用域
- 局部变量local variable:只能在函数内部使用。
- 全局变量global variable:可以在当前shell session中使用。
- 环境变量environment variable:可以在其他shell session中使用。
全局变量
- 每个shell会话都有自己的作用域,互补干扰。
- 打开一个shell窗口就是创建了一个shell会话,打开过个窗口,就是多个shell会话。
- 每个shell会话都是独立的进程,拥有不同的pid。
- 在一个shell会话中,可以执行多个shell脚本文件,此时全局变量在这些文件中都生效。
- 在Shell中定义的变量,默认就是全局变量。
两个会话中的全局变量互补干扰
shell会话1
Last login: Mon Jan 7 10:44:30 on ttys004
You have mail.
admindeMacBook-Pro:~ admin$ h=521
admindeMacBook-Pro:~ admin$ echo $h
521
shell会话2
Last login: Mon Jan 7 10:53:13 on ttys004
You have mail.
admindeMacBook-Pro:~ admin$ echo $h
全局变量在同一shell会话中的多个shell脚本文件公用
admindeMacBook-Pro:myshell admin$ cat a.sh
#!/bin/bash
echo $a
admindeMacBook-Pro:myshell admin$ cat b.sh
#!/bin/bash
echo $a$a
admindeMacBook-Pro:myshell admin$ echo $a
99
admindeMacBook-Pro:myshell admin$ . a.sh
99
admindeMacBook-Pro:myshell admin$ . b.sh
9999
全局变量在多个shell脚本中穿梭
admindeMacBook-Pro:myshell admin$ cat a.sh
#!/bin/bash
bbb=1314
admindeMacBook-Pro:myshell admin$ cat b.sh
#!/bin/bash
echo $bbb
admindeMacBook-Pro:myshell admin$ echo $bbb
admindeMacBook-Pro:myshell admin$ . b.sh
admindeMacBook-Pro:myshell admin$ . a.sh
admindeMacBook-Pro:myshell admin$ . b.sh
1314
局部变量
- 在shell函数中定义的变量,默认也是全局变量。
- 如果要使用局部变量,则在变量前添加local命令。
admindeMacBook-Pro:myshell admin$ cat a.sh
#!/bin/bash
# create function
function test(){
aaaa=zhangsan
local bbbb=lisi
}
# call function
test
echo the globle variable is aaaa=$aaaa
echo the local vaiable is bbbb=$bbbb
admindeMacBook-Pro:myshell admin$ . a.sh
the globle variable is aaaa=zhangsan
the local vaiable is bbbb=
- shell的局部变量与js类型,在js中,只有加上关键字var才算是局部变量。
环境变量
- 全局变量值在当前会话中生效,如果用
export
命令将其导出,则变成了环境变量,那么他在所有子shell会话中生效。 - 环境变量创建时所创建的shell会话称之为
父shell
。 - 在
父shell
中创建的shell会话称之为子shell
。 子shell
会继承父shell
的环境变量为己所用。- 环境变量只能向下传递,即:
传子不传父
。 - 通过
bash
命令创建当前shell
的子shell
。 - 通过
exit
命令一层一层的退出子shell
。
admindeMacBook-Pro:myshell admin$ echo $ccc
521
admindeMacBook-Pro:myshell admin$ bash #进入子shell
bash-3.2$ echo $ccc #输出父shell的全局变量,无效
bash-3.2$ exit #退出子shell
exit
admindeMacBook-Pro:myshell admin$ export ccc
admindeMacBook-Pro:myshell admin$ export ddd=1314
admindeMacBook-Pro:myshell admin$ bash #再次进入子shell
bash-3.2$ echo $ccc$ddd
5211314
-
可以通过
export ddd=1314
的形式,直接创建环境变量。 -
注意:环境变量并不是在所有shell会话中都生效,而是当前shell的所有子shell中生效。
-
想要环境变量在所有shell中生效,需要把它写入到启动文件中。