Chinaunix首页 | 论坛 | 博客
  • 博客访问: 504238
  • 博文数量: 119
  • 博客积分: 5054
  • 博客等级: 大校
  • 技术积分: 1305
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-03 13:13
文章分类

全部博文(119)

文章存档

2011年(4)

2010年(115)

我的朋友

分类:

2010-01-03 22:32:33

摘自《高级bash脚本编程指南》

declare或者typeset内建命令(这两个命令是完全一样的)允许指定变量的具体类型. 在某些编程语言中, 这是指定变量类型的一种很弱的形式. declare命令是从Bash 2.0之后才被引入的命令. typeset也可以用在ksh的脚本中.

declare/typeset选项

-r 只读

      1 declare -r var1

(declare -r var1与readonly var1是完全一样的)

这和C语言中的const关键字一样, 都用来指定变量为只读. 如果你尝试修改一个只读变量的值, 那么会产生错误信息.

-i 整型

      1 declare -i number
      2 # 脚本将会把变量"number"按照整型进行处理.
      3
      4 number=3
      5 echo "Number = $number"     # Number = 3
      6
      7 number=three
      8 echo "Number = $number"     # Number = 0
      9 # 脚本尝试把字符串"three"作为整数来求值(译者注: 当然会失败, 所以出现值为0).

如果把一个变量指定为整型的话, 那么即使没有expr或者let命令, 也允许使用特定的算术运算.

      1 n=6/3
      2 echo "n = $n"       # n = 6/3
      3
      4 declare -i n
      5 n=6/3
      6 echo "n = $n"       # n = 2

-a 数组

      1 declare -a indices

变量indices将被视为数组.
-f 函数

      1 declare -f

如果在脚本中使用declare -f, 而不加任何参数的话, 那么将会列出这个脚本之前定义的所有函数.

      1 declare -f function_name

如果在脚本中使用declare -f function_name这种形式的话, 将只会列出这个函数的名字.
-x export

      1 declare -x var3

这句将会声明一个变量, 并作为这个脚本的环境变量被导出.
-x var=$value

      1 declare -x var3=373

declare命令允许在声明变量类型的同时给变量赋值.

例子 9-22. 使用declare来指定变量的类型

  1 #!/bin/bash
  2
  3 func1 ()
  4 {
  5 echo This is a function.
  6 }
  7
  8 declare -f        # 列出前面定义的所有函数.
  9
 10 echo
 11
 12 declare -i var1   # var1是个整型变量.
 13 var1=2367
 14 echo "var1 declared as $var1"
 15 var1=var1+1       # 整型变量的声明并不需要使用'let'命令.
 16 echo "var1 incremented by 1 is $var1."
 17 # 尝试修改一个已经声明为整型变量的值.
 18 echo "Attempting to change var1 to floating point value, 2367.1."
 19 var1=2367.1       # 产生错误信息, 并且变量并没有被修改.
 20 echo "var1 is still $var1"
 21
 22 echo
 23
 24 declare -r var2=13.36         # 'declare'允许设置变量的属性,
 25                               #+ 同时给变量赋值.
 26 echo "var2 declared as $var2" # 试图修改只读变量的值.
 27 var2=13.37                    # 产生错误消息, 并且从脚本退出.
 28
 29 echo "var2 is still $var2"    # 将不会执行到这行.(似乎有例外,在bash 3.0以上脚本会继续执行)
 30
 31 exit 0                        # 脚本也不会从此处退出.

使用declare内建命令可以限制变量的作用域.

  1 foo ()
  2 {
  3 FOO="bar"
  4 }
  5
  6 bar ()
  7 {
  8 foo
  9 echo $FOO
 10 }
 11
 12 bar   # 打印bar.

然而 . . .

  1 foo (){
  2 declare FOO="bar"
  3 }
  4
  5 bar ()
  6 {
  7 foo
  8 echo $FOO
  9 }
 10
 11 bar  # 什么都不打印.
 12
 13
 14 # 感谢, Michael Iatrou, 指出这点.
阅读(910) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~