13.1.4 变量赋值和取值
变量赋值的方法是非常简单明了的,如下所示:
#
定义变量:变量名=
变量值
#
注意点一:变量名和变量值之间用等号紧紧相连,之间没有任何空格
[root@localhost ~]# name=john #
定义变量
#
如果不注意,等号任何一边出现空格就会出错
[root@localhost ~]# name = john
-bash: name: command not found
[root@localhost ~]# name="john" #
这样也是可以的
#
注意点二:当变量中有空格时必须用引号括起,否则会出现错误
#
其中的引号可以是双引号,也可以是单引号
[root@localhost ~]# name="john wang"
[root@localhost ~]# name=john wang
-bash: wang: command not found
变量的取值也很简单,只需要在变量名前加上$符号既可,严谨一点的写法是${},如下所示:
- [root@localhost ~]# echo $name
john wang
[root@localhost ~]# echo ${name}
john wang
#
使用${}
获取变量值是一种相对比较保险的方式
[root@localhost ~]# name="sue "
#
这里本是想打印名字,后面跟Hello
的,但Shell
试图将nameHello
解释为一个变量。
从Shell
语法来说,也确实应该将nameHello
解释为变量
[root@localhost ~]# echo $nameHello
#
因为变量nameHello
未声明,所以值为空
[root@localhost ~]# echo ${name}Hello
sue Hello
#
注意点三:如果变量值引用的是其他变量,则必须使用双引号。因为单引号会阻止Shell
解释特殊字符$
[root@localhost ~]# name=john
[root@localhost ~]# name1="$name"
[root@localhost ~]# echo $name1
john
[root@localhost ~]# name1='$name'
[root@localhost ~]# echo $name1
$name
由于Shell具有“弱变量”的特性,因此即便在没有预先声明变量的时候也是可以引用的,而且没有任何报错或者提醒,这可能会造成脚本中引用不正确的变量,从而导致脚本异常,但是却很难找出原因。在这种情况下,可以设置脚本运行时必须遵循“先声明再使用”的原则,这样一旦脚本中出现使用未声明的变量的情况则立刻报错,如下所示:
- [root@localhost ~]# echo $unDefinedVar
#
因为该变量未声明,所以值为空,但没有任何报错
#
设置变量必须先声明再使用
[root@localhost ~]# shopt -s -o nounset
[root@localhost ~]# echo $unDefinedVar
-bash: unDefinedVar: unbound variable