declare [-aAfFgilnrtux] [-p] [name[=value] …],声明变量并设置属性。如果没有任何参数,则显示所有参数及其对应的值。-p选项,显示每个name变量对应的属性和值。当-p与name一起使用时会忽略除-f和-F之外的其他选项。当只有-p选项没有指定name时,将显示具有附加选项指定的属性的所有变量的属性和值。如果也没有其他附加选项,则显示所有变量的属性和值。
可选的附加选项如下:
-a:表示每个name都是一个索引数组变量。
-A:表示每个name都是一个关联数组变量。
-f:表示每个name都是一个函数名,此选项会打印函数定义。
-F:表示每个name都是一个函数名,此选项不会打印函数定义,只打印函数名和属性。如果使用内建命令shopt启用extdebug,还会显示定义每个name的源文件名和行号。
-g:强制在全局范围内创建或修改变量,即使是在shell函数中执行declare。
-i:变量将被当做整数。当为变量赋值时执行算术运算。
-l:当为变量赋值时,所有大写字符都转换为小写。
-n:为name设置namref属性,使其成为对另一个变量的名称引用,另一个变量由name的值value定义。name的所有引用、赋值和属性修改都是对name的值value引用的变量执行的,除非使用或更改-n属性本身。不能将nameref属性应用于数组变量。
-r:使每个name变量为只读的。这些变量后续不能进行修改或取消。
-t:为name设置trace属性,跟踪函数从调用shell继承DEBUG和RETURN类型的trap。trace属性对变量没有特殊意义。
-u:当为变量赋值时,所有小写字符都转换为大写。
-x:将每个name导出到后续的命令或子进程,相当于对name执行了export。
declare
declare -p BASH PS2
declare -a
declare -x -a test
declare -p test