linux bash shell之declare
declare或typeset内建命令(它们是完全相同的)可以用来限定变量的属性.这是在某些编程语言中使用的定义类型不严格的方式。命令declare是bash版本2之后才有的。命令typeset也可以在ksh脚本中运行。
declare/typeset 选项
-r 只读
#!/bin/bash
declare -r haha=leaf
echo $haha
haha=what
echo what is $haha ?
运行结果如下,可见声明后再也无法修改。
[root@mfsbackup mnt]# ./declare2.sh
leaf
./declare2.sh: line 11: haha: readonly variable
what is leaf ?
-i 整形#!/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.shn=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声明的是一个局部变量,所以函数调用完了就没了。
-f 显示之前的所有函数 跟上函数名指定显示某个函数
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结果