shell 脚本declare声明变量

linux bash shell之declare

declaretypeset内建命令(它们是完全相同的)可以用来限定变量的属性.这是在某些编程语言中使用的定义类型不严格的方式。命令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.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声明的是一个局部变量,所以函数调用完了就没了。

-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结果





你可能感兴趣的:(shell 脚本declare声明变量)