shell入门学习笔记-04作用域

版权声明:本文为博主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中生效,需要把它写入到启动文件中。

猜你喜欢

转载自blog.csdn.net/hanchao5272/article/details/86430223