全部博文(584)
分类: LINUX
2010-01-06 15:10:16
摘自《高级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, 指出这点.