------------ $ 变量替换操作符 只有在变量被声明,赋值,unset或exported或者是在变量代表一个signal的时候,变量才会是以本来的面目出现在脚本里.变量在被赋值的时候,可能需要使用"=",read状态或者是在循环的头部. 在""中还是会发生变量替换,这被叫做部分引用,或叫弱引用.而在''中就不会发生变 量替换,这叫做全引用,也叫强引用.具体见第5章的讨论.
注意:$var与${var}的区别,不加{},在某些上下文将引起错误,为了安全,使用2. 具体见9.3节 参数替换.
Example 4-1. 变量赋值和替换 ################################Start Script####################################### 1 #!/bin/bash 2 3 # 变量赋值和替换 4 5 a=375 6 hello=$a 7 8 #------------------------------------------------------------------------- 9 # 强烈注意,在赋值的前后一定不要有空格. 10 # 如果有空格会发生什么? 11 12 # 如果"VARIABLE =value", 13 # ^ 14 #+ 脚本将尝试运行一个"VARIABLE"的命令,带着一个"=value"参数. 15 16 # 如果"VARIABLE= value", 17 # ^ 18 #+ script tries to run "value" command with 18 #+ 脚本将尝试运行一个"value"的命令,带着 19 #+ the environmental variable "VARIABLE" set to "". 19 #+ 一个被赋成""值的环境变量"VARIABLE". 20 #------------------------------------------------------------------------- 21 22 23 echo hello # 没有变量引用,不过是个hello字符串 24 25 echo $hello 26 echo ${hello} # 同上 27 28 echo "$hello" 29 echo "${hello}" 30 31 echo 32 33 hello="A B C D" 34 echo $hello # A B C D 35 echo "$hello" # A B C D 36 # 就象你看到的echo $hello 和 echo "$hello" 将给出不同的结果. 37 # ^ ^ 38 # Quoting a variable preserves whitespace. 38 # 引用一个变量将保留其中的空白,当然,如果是变量替换就不会保留了. 39 40 echo 41 42 echo '$hello' # $hello 43 # ^ ^ 44 # 全引用的作用 45 #+ 将导致"$"变成一个单独的字符. 46 47 # 注意两种引用不同的效果 48 49 50 hello= # 设置为空值 51 echo "\$hello (null value) = $hello" 52 # 注意设置一个变量为空,与unset它,不是一回事,虽然看起来一样 53 # 54 55 # -------------------------------------------------------------- 56 57 # 可以在同一行上设置多个变量. 58 #+ 要以空白分隔 59 # 小心,这会降低可读性,和可移植性. 60 61 var1=21 var2=22 var3=$V3 62 echo 63 echo "var1=$var1 var2=$var2 var3=$var3" 64 65 # 在老版本的"sh"上,可能会有问题. 66 67 # -------------------------------------------------------------- 68 69 echo; echo 70 71 numbers="one two three" 72 # ^ ^ 73 other_numbers="1 2 3" 74 # ^ ^ 75 # 如果变量中有空白,那么引用就必要了. 76 # 77 echo "numbers = $numbers" 78 echo "other_numbers = $other_numbers" # other_numbers = 1 2 3 79 echo 80 81 echo "uninitialized_variable = $uninitialized_variable" 82 # Uninitialized变量为空值(根本就没赋值). 83 uninitialized_variable= # 声明,但是没被初始化 84 #+ 其实和前边设置为空值得作用是一样的. 85 echo "uninitialized_variable = $uninitialized_variable" 86 # 还是一个空值 87 88 uninitialized_variable=23 # 赋值 89 unset uninitialized_variable # Unset it. 90 echo "uninitialized_variable = $uninitialized_variable" 91 # 还是空值 92 echo 93 94 exit 0 ################################End Script######################################### 注意: 一个空值变量,或者是根本就没声明的变量,在赋值之前使用它可能会引起问题. 但是还是可以用来做算术运算 ################################Start Script####################################### 1 echo "$uninitialized" # (blank line) 2 let "uninitialized += 5" # Add 5 to it. 3 echo "$uninitialized" # 5 4 5 # 结论: 6 # 对于一个空值变量在做算术操作的时候,就好像它的值为0一样. 8 # This is undocumented (and probably non-portable) behavior. 7 # 这并没被文档化(可能是不可移植)的行为. ################################End Script######################################### 具体参考 Example 11-21 |