declare或typeset内建命令(它们是完全相同的)可以用来限定变量的属性.这是在某些编程语言中使用的定义类型不严格的方式。命令declare是bash版本2之后才有的。命令typeset也可以在ksh脚本中运行。
declare/typeset 选项
#!/bin/bash declare -r haha=leaf echo $haha haha=what echo what is $haha ?
运行结果如下,可见声明后再也无法修改。
#!/bin/bash declare -i num num=1 echo num="$num" num=2 echo num="$num" num=three echo num="$num" num=1 num=$num+1 echo num="$num"
[root@mfsbackup mnt]# ./declare3.sh
num=1
num=2
num=0
num=2
#!/bin/bash n=10/5 echo n=$n typeset -i n //和declare一个效果 echo n=$n //注意这里的输出 n=10/5 echo n=$n
[root@mfsbackup mnt]# ./declare4.sh
n=10/5
n=10/5 //注意这里的输出,可以看出对前面已经声明过的变量还是那个变量,declare的时候需要再次声明。
n=2
#!/bin/bash
foo()
{
declare FOO="bar"
echo "now FOO=$FOO"
return 20
}
bar()
{
foo
if [ $? -eq 20 ];then
echo "$FOO"
else
echo nono
fi
}
bar [root@mfsbackup mnt]# ./declare1.sh
now FOO=bar
上面可以看出declare声明的是一个局部变量,所以函数调用完了就没了。
7 #!/bin/bash
8 foo()
9 {
10 declare FOO="bar"
11 echo "now FOO=$FOO"
12 return 20
13 }
14 bar()
15 {
16 foo
17 if [ $? -eq 20 ];then
18 echo "$FOO"
19 else
20 echo nono
21 fi
22 }
23 bar
24 declare -f
25 declare -f foo
[root@mfsbackup mnt]# ./declare1.sh
now FOO=bar
bar ()
{
foo;
if [ $? -eq 20 ]; then
echo "$FOO";
else
echo nono;
fi
}
foo ()
{
declare FOO="bar";
echo "now FOO=$FOO";
return 20
} // declare -f 结果
foo ()
{
declare FOO="bar";
echo "now FOO=$FOO";
return 20
} //declare -f foo结果
原文:http://my.oschina.net/loveleaf/blog/489692