4.2. 变量赋值

=

赋值操作符(它的左右两边不能有空白符)

不要搞混了=和-eq,-eq是比赋值操作更高级的测试。

注意:等于号(=)根据环境的不同它可能是赋值操作符也可能是一个测试操作符。


例子 4-2. 简单的变量赋值

   1 #!/bin/bash
   2 # 裸变量
   3 
   4 echo
   5 
   6 # 什么时候变量是“裸”的?比如说,变量名前面没有$?
   7 #当变量被赋值而不是引用时,我们称它为是裸变量。
   8 
   9 # 赋值
  10 a=879
  11 echo "The value of \"a\" is $a."
  12 
  13 # 用命令'let'赋值。
  14 let a=16+5
  15 echo "The value of \"a\" is now $a."
  16 
  17 echo
  18 
  19 # 在一个for循环里赋值(其实,这是一种伪赋值):
  20 echo -n "Values of \"a\" in the loop are: "
  21 for a in 7 8 9 11
  22 do
  23   echo -n "$a "
  24 done
  25 
  26 echo
  27 echo
  28 
  29 # 用'read'命令 (这也是一种赋值):
  30 echo -n "Enter \"a\" "
  31 read a
  32 echo "The value of \"a\" is now $a."
  33 
  34 echo
  35 
  36 exit 0


例子 4-3. 简单且奇特的变量赋值

   1 #!/bin/bash
   2 
   3 a=23              # 简单的情况
   4 echo $a
   5 b=$a
   6 echo $b
   7 
   8 # 现在,来一点奇怪的赋值(命令替换)
   9 
  10 a=`echo Hello!`   # 把'echo'命令的结果赋值给变量'a'
  11 echo $a
  12 #  注意在一个#+的命令替换结构中包含一个感叹号(!),
  13 #+ 将不会工作。
  14 #+ 因为感叹号触发了Bash"历史命令机制"
  15 #  不过,在脚本里,历史命令机制是被禁用的.
  16 
  17 a=`ls -l`         # 把'ls -l'命令的结果赋给变量'a'
  18 echo $a           # 如果没有引号,则会删除多余tab键和空白符
  19 echo
  20 echo "$a"         # 加了双引号,则能够原样保留空白符
  21                   # (参考"引用"章节)
  22 
  23 exit 0

变量赋值也可以使用$(...) 机制(它是比斜引号更新的方法). 它实际是命令替换的一种形式.

   1 # 摘自/etc/rc.d/rc.local
   2 R=$(cat /etc/redhat-release)
   3 arch=$(uname -m)