Shell(Bash)用户自定义变量使用方法详解

用户自定义变量是最常用的变量类型,其特点是变量名和变量值都是由用户自由定义的。

那么,该如何定义变量呢?很简单,只需执行"变量名=变量值"命令即可,不过要遵守变量定义规则。例如:

[root@localhost ~]# name="C biancheng"

变量的定义就是这么简单,但是如果不遵守变量定义规则,就会报错。比如:

[root@localhost ~]# 2name="C biancheng"
-bash: 2name=shen chao: command not found
#变量名不能以数字开头
[root@localhost ~]# name = "C biancheng"
-bash: name: command not found
#左右两侧不能有空格
[root@localhost ~]# name=C baincheng
-bash: chao: command not found
#变量的值如果有空格,必须用引号包含


我们再来看如何进行变量叠加。例如:

[root@localhost ~]# aa=123
#定义变量aa的值是123
[root@localhost ~]# aa="$aa"456
#重复定义变量aa的值是源aa的值加上456
[root@localhost ~]# echo $aa
123456
#aa的值已经变成了123456
[root@localhost ~]# aa=${aa}789
[root@localhost ~]# echo $aa
123456789
#在进行变量叠加时也可以使用${变量名}格式

这里要小心,在进行变量叠加时,变量名需要用双引号或 ${} 包含。

在定义变量时,也可以使用特殊字符,如双引号、单引号、反引号、小括号、大括号等。

变量调用

当我们需要提取变量中的内容时,需要在变量名之前加入"$"符号。也就是说,我们需要调用变量时,需要在变量名之前加入"$"符号。那么最简单的变量调用就是通过 echo 命令输出变量的值。命令如下:

[root@localhost ~]# name="C biancheng"
#定义变量name
[root@localhost ~]# echo $name
C biancheng
#输出变量name的值

就这么简单。不过,不仅通过 echo 命令输出变量的值时才需要在变量名前加入符号,只要需要调用变量的值,就需要在变量名前加入"$"符号。

变量查看

我们可以通过 echo 命令查询已经设定的变量的值,这种查询是已知变量名查询变量值。但是如果我不知道变量名,那么可以查询系统中已经存在的变量吗?

当然可以,只需使用 set 命令即可。set 命令可以用来查看系统中的所有变量(用户自定义变量和环境变量)和设定 Shell 的执行环境。命令格式如下:

[root@localhost ~]# set [选项]

选项:
  • -u:如果设定此选项,则在调用未声明的变量时会报错(默认无任何提示);
  • -x:如果设定此选项,则在命令执行之前会先把命令输出一次;

举几个例子:

[root@localhost ~]# set
BASH=/bin/bash
...省略部分输出...
name='C biancheng'
#直接使用set命令,会查询系统中所有的变量,包含用户自定义变量和环境变量
[root@localhost ~]# set -u
[root@localhost ~]# echo $file
-bash: file: unbound variable
#当设置了-u选项后,如果调用没有设定的变量则会报错。默认是没有任何输出的
[root@localhost ~]# set -x
[root@localhost ~]# ls
+ ls --color=auto
anaconda-ks.cfg install.log install.log.syslog sh tdir test testfile
#如果设定了-x选项,则会在每条命令执行之前先把命令输出一次

set 命令的选项和功能众多,不过我们更常用的还是使用 set 命令查看变量。

变量删除

要想删除自定义变量,可以使用 unset 命令。命令格式如下:

[root@localhost ~]# unset 变量名

这里只是清空变量,而不是调用变量的值,所以在变量名前不需要加入符号。举个例子:

[root@localhost ~]# unset name
#删除name变量

这条命令执行之后,再查询变量,就会发现这个变量已经为空了。