Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1719299
  • 博文数量: 362
  • 博客积分: 10587
  • 博客等级: 上将
  • 技术积分: 4098
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-10 18:15
文章分类

全部博文(362)

文章存档

2014年(1)

2013年(58)

2011年(115)

2010年(112)

2009年(76)

分类:

2010-09-28 15:58:10

当变量"裸体"出现的时候 -- 也就是说没有$前缀的时候 -- 那么变量可能存在如下几种情况. 变量被声明或被赋值, 变量被unset, 变量被exporte, 或者是变量处在一种特殊的情况 -- 变量代表一种信号参见. 变量赋值可以使用=(比如 var1=27), 也可以在read命令中或者循环头进行赋值 (for var2 in 1 2 3).

注意$variable事实上只是${variable}的简写形式. 在某些上下文中$variable可能会引起错误, 这时候你就需要用${variable}
比如
# a="hehe"
# echo fsdfd${a}ok  没问题
fsdfdheheok
# echo fsdfd$aok 出问题了,变量a没出来
fsdfd
temobi-ftp:~ # 
 强烈注意, 在赋值的的时候, 等号前后一定不要有空格。
注意设置一个变量为null, 与unset这个变量, 并不是一回事。
#var3=$V3	
#echo $var3  没输出
#
一个未初始化的变量将会是"null"值 - 就是未赋值(但并不是代表值是0!). 在给变量赋值之前就使用这个变量通常都会引起问题.
但是在执行算术操作的时候, 仍然有可能使用未初始化过的变量.
  1 echo "$uninitialized"                                # (blank line)
  2 let "uninitialized += 5"                             # Add 5 to it.
  3 echo "$uninitialized"                                # 5
  4 
  5 #  结论:
  6 #  一个未初始化的变量是没有值的, 
  7 #+ 但是在做算术操作的时候, 这个未初始化的变量看起来值为0. 
  8 #  这是一个未文档化(并且可能不具可移植性)的行为. 


简单和复杂, 两种类型的变量赋值

  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           # 然而, 如果没有引号的话将会删除ls结果中多余的tab和换行符.
 19 echo
 20 echo "$a"         # 如果加上引号的话, 那么就会保留ls结果中的空白符.
 21                   # (具体请参阅"引用"的相关章节.)
 22 
 23 exit 0

使用$(...)机制来进行变量赋值(这是一种比更新的一种方法). 事实上这两种方法都是的一种形式.

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

阅读(1285) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~