declare或typeset内建命令(它们是彻底相同的)能够用来限定变量的属性.这是在某些编程语言中使用的定义类型不严格的方式。命令declare是bash版本2以后才有的。命令typeset也能够在ksh脚本中运行。html
declare/typeset 选项linux
#!/bin/bash declare -r haha=leaf echo $haha haha=what echo what is $haha ?
运行结果以下,可见声明后再也没法修改。
shell
#!/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 bash
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声明的是一个局部变量,因此函数调用完了就没了。spa
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结果
code