Linux Shell中的变量详解

什么是变量

变量一个可以变化的量,比如字母a,可以表示3这个数字,对它进行一些操作之后,它可以变成其他的数字:

[root@localhost ~]# a=3
[root@localhost ~]# echo $a
3
[root@localhost ~]# b=4
[root@localhost ~]# echo $b
4
[root@localhost ~]# a=$(($a+$b))
[root@localhost ~]# echo $a
7

上例中,同样是字母a,最开始表示的是3,最后变成了7,而且它还可以继续的变下去。

变量的命名

以数字、字母、下划线组成,不能以数字开头。
正确的变量:a_b,ab,_aa,a9。
错误的变量:9a。

[root@localhost ~]# 9a=4
-bash: 9a=4: 未找到命令

变量的加减乘除以及相连

加:$((a+b))。

[root@localhost ~]# a=3
[root@localhost ~]# b=4
[root@localhost ~]# $((a*b))
-bash: 12: 未找到命令
[root@localhost ~]# c=$((a+b))

减、乘、除和加一样,不再上代码。

减:$((a-b))。
乘:$((a*b))。
除:$((a/b))。
连接:ab。

[root@localhost ~]# echo $a$b
34

连接变量和非变量需要用引号隔开一下:

[root@localhost ~]# echo $a$b'c'
34c

全局变量与局部变量

局部变量

局部变量的特点是在当前shell中才生效,子shell中不生效。

可能有的同学不清楚什么叫子shell。子shell就是在当前shell中再开一个shell。使用bash命令就可以进入到子shell。

图片[1]-Linux Shell中的变量详解-不念博客
pstree


使用exit命令退出子shell,我们再用pstree命令看一下。

pstree是查看进程树的命令

图片[2]-Linux Shell中的变量详解-不念博客
pstree

弄明白子shell的概念,我们就可以来做一下实验了。

我们在当前shell中定义变量b=3,然后分别在当前shell和子shell中看能不能找到它。

[root@localhost shellScripts]# b=4
[root@localhost shellScripts]# echo $b
4
[root@localhost shellScripts]# bash
[root@localhost shellScripts]# echo $b
#没有输出

实验结果和我们的理解是一致的。

全局变量

全局变量就是在当前shell和子shell中都可见的变量。使用export命令可以把局部变量变成全局变量,就像这样:

export a=3

网上有很多观点认为全局变量就是环境变量,我觉得这个理解是有问题的。

因为环境变量是不区分终端的,而全局变量是区分终端的。最简单的证明就是,如果我们在a终端中使用export定义一个全局变量,在终端b中是找不到的。
a终端下,当前shell和子shell都可见:

[root@localhost shellScripts]# export c=5
[root@localhost shellScripts]# echo $c
5
[root@localhost shellScripts]# bash
[root@localhost shellScripts]# echo $c
5

b终端下不可见:

[root@localhost ~]# echo $c
#没有输出

你可能现在还疑惑到底环境变量是什么?我简单点讲,就是系统启动时或者你进入shell时,系统给你准备的一些环境,比如你的家目录是哪里、你的历史列表有多长,你的主机名是什么等等。

© 版权声明
THE END