082-【Bash百宝箱】shell内建命令之declare、typeset、local

1、declare(typeset)

在shell中,内建(builtin)命令declare与typeset用法相同,格式如下:

declare [-aAfFgilnrtux] [-p] [name[=value] ...]
typeset [-aAfFgilnrtux] [-p] [name[=value] ...]

declare命令用于声明变量,可以给变量设置属性。如果没有指定name,则显示相应变量的值。下面介绍declare命令各选项的含义。

“-p”:显示每个name的属性和值,不指定name时,则显示相应的所有变量的属性和值。 
“-f”:用于函数,显示函数定义。 
“-F”:用于函数,只显示函数名字,不显示函数定义。 
“-a”:用于索引(下标)数组。 
“-A”:用于关联(键值对)数组。 
“-i”:用于整数,可以进行数学运算。 
“-n”:用于引用变量,这个变量name的值实际上是变量value的值,value作为一个变量来使用。不能用于数组。 
“-l”:对变量赋值时,值的大写字母全部转换为小写。 
“-u”:对变量赋值时,值的小写字母全部转换为大写。 
“-r”:声明变量只读,不能被修改,也不能unset。 
“-g”:在函数中declare命令效果同内置命令local,变量的影响范围是局部的,除非使用了“-g”。 
“-x”:等效于内置命令export。 
“-t”:给每个name设置trace属性,对函数来说,可以继承调用shell的trap命令的DEBUG和RETURN属性,对变量则没什么意义。 
对于上面的选项,可以使用加号“+”代替减号“-”,效果是关闭对应的属性,但是,“+a”和“+r”无效。

下面是declare命令在数学运算中的例子:

$ a=1
$ b=2
$ echo $a+$b
1+2
$ declare -i a=1
$ declare -i b=2
$ declare -i c
$ c=$a+$b
$ echo $c
3

2、local

在shell中,内建(builtin)命令local,格式如下:

local [option] [name[=value] ...]

     

local命令只能用shell函数,声明变量name为局部变量,只对当前函数或其子进程有效,选项option可以是内建命令declare可以接受的选项。

不在shell函数中使用local命令会出错:

$ local
bash: local: can only be used in a function

在shell函数中使用local命令:

$ cat test.sh 
#!/bin/bash

foo=global
echo $foo

bar()
{
    echo $foo
    local foo=local
    echo $foo
}

bar
echo $foo
$ bash test.sh 
global
global
local
global

在shell函数中不使用local命令:

$ cat test.sh 
#!/bin/bash

foo=global
echo $foo

bar()
{
    echo $foo
    foo=local
    echo $foo
}

bar
echo $foo
$ bash test.sh 
global
global
local
local

猜你喜欢

转载自my.oschina.net/u/3635512/blog/1637875