在shell中,内建(builtin)命令declare与typeset用法相同,格式以下:shell
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”无效。bash
下面是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
在shell中,内建(builtin)命令local,格式以下:ui
local [option] [name[=value] ...]
local命令只能用shell函数,声明变量name为局部变量,只对当前函数或其子进程有效,选项option能够是内建命令declare能够接受的选项。spa
不在shell函数中使用local命令会出错:code
$ 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