标签:
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