局部变量与环境变量
在bash中,变量是一个用来存储数据的实体。每个变量都有一个名称和一个值,名称是变量的标识符,值是变量的数据。
举个例子,终端的类型被存储在变量TERM
中,使用echo
命令查看TERM
的值:
$ echo $TERM
xterm
也可以使用{}
将变量名括起来:
$ echo ${TERM}
xterm
在使用echo
查看变量中的数据时,需要在变量名前加$
号,如果没有加,则echo
认为其是一个字符串:
$ echo TERM
TERM
在echo
命令中,变量被双引号" "
括起来,会显示变量的数据;如果被单引号' '
括起来,会将变量名显示为字符串:
$ echo "I am using ${TERM}."
I am using xterm.
$ echo 'I am using ${TERM}.'
I am using ${TERM}.
在bash中,变量分为环境变量(全局变量)和局部变量。
环境变量可以被子进程读取和修改,父进程对环境变量的修改会传递到子进程,而子进程对变量的修改不会传递到父进程。
局部变量只能在本进程中被读取和修改。
设置变量
使用变量名=值
的格式来为变量赋值,需要注意的是=
左右没有空格:
$ zhang=22
$ echo $zhang
22
$ zhang=55
$ echo $zhang
55
使用unset
命令删除变量:
$ echo $zhang
55
$ unset zhang
$ echo $zhang
$
环境变量
在交互式bash中,还是使用环境变量多一些。
bash有一些默认的环境变量,使用env
查看:
$ env
XDG_SESSION_ID=39513
TERM=xterm
SHELL=/bin/bash
# 省略
在bash中,环境变量的变量名一般全部采用大写字母。
bash中有一些默认的环境变量,比如HOSTNAME
的值为计算机名称,HOME
的值为用户的家目录,LOGNAME
的值为当前的用户表示,PATH
的值为搜索程序的目录等。
用户同样可以自己定义环境变量,使用export
命令:
$ ZHANG=23
$ export ZHANG
$ bash # 进入子进程
$ echo $ZHANG
23
$
可见,在export
变量后,该变量可以被当前进程和当前进程的子进程读取和使用,也就是说,该变量成为了环境变量。