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 ?
- 运行结果如下,可见声明后再也无法修改。
-
[[email protected] 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"
- [[email protected] 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
[[email protected] 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
[[email protected] 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
[[email protected] 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结果
时间: 2024-10-06 21:36:23