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


变量的取值也很简单,只需要在变量名前加上$符号既可,严谨一点的写法是${},如下所示:


  1. [root@localhost ~]# echo $name

  2. john wang

  3. [root@localhost ~]# echo ${name}

  4. john wang

  5. #

  6. 使用${}

  7. 获取变量值是一种相对比较保险的方式

  8. [root@localhost ~]# name="sue "

  9. #

  10. 这里本是想打印名字,后面跟Hello

  11. 的,但Shell

  12. 试图将nameHello

  13. 解释为一个变量。

  14. Shell

  15. 语法来说,也确实应该将nameHello

  16. 解释为变量

  17. [root@localhost ~]# echo $nameHello

  18. #

  19. 因为变量nameHello

  20. 未声明,所以值为空

  21. [root@localhost ~]# echo ${name}Hello

  22. sue Hello

  23. #

  24. 注意点三:如果变量值引用的是其他变量,则必须使用双引号。因为单引号会阻止Shell

  25. 解释特殊字符$

  26. [root@localhost ~]# name=john

  27. [root@localhost ~]# name1="$name"

  28. [root@localhost ~]# echo $name1

  29. john

  30. [root@localhost ~]# name1='$name'

  31. [root@localhost ~]# echo $name1

  32. $name


由于Shell具有“弱变量”的特性,因此即便在没有预先声明变量的时候也是可以引用的,而且没有任何报错或者提醒,这可能会造成脚本中引用不正确的变量,从而导致脚本异常,但是却很难找出原因。在这种情况下,可以设置脚本运行时必须遵循“先声明再使用”的原则,这样一旦脚本中出现使用未声明的变量的情况则立刻报错,如下所示:


  1. [root@localhost ~]# echo $unDefinedVar

  2. #

  3. 因为该变量未声明,所以值为空,但没有任何报错

  4. #

  5. 设置变量必须先声明再使用

  6. [root@localhost ~]# shopt -s -o nounset

  7. [root@localhost ~]# echo $unDefinedVar

  8. -bash: unDefinedVar: unbound variable