shell之declare 声明变量类型

来源:互联网 发布:淘宝手机尺寸是多少 编辑:程序博客网 时间:2024/06/05 00:33

原文地址:http://www.cnblogs.com/fhefh/archive/2011/04/22/2024857.html

declaretypeset内建命令(它们是完全相同的)可以用来限定变量的属性.这是在某些编程语言中使用的定义类型不严格的方式。命令declare是bash版本2之后才有的。命令typeset也可以在ksh脚本中运行。

declare/typeset 选项

-r 只读
   1 declare -r var1

(declare -r var1readonly 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-21. 用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"    # 这行不会被执行.  30   31 exit 0                        # 脚本不会从这儿退出.

Caution

使用内建的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指出这一点.
Have a nice day!!!
0 0
原创粉丝点击