declare 或 typeset 内建命令(它们是完全同义的)允许修改变量的属性。这是一种非常弱形式的类型声明,类似于某些编程语言中可用的[1]。 declare 命令是 Bash 版本 2 或更高版本特有的。typeset 命令也适用于 ksh 脚本。
(declare -r var1作用等同于readonly var1)
这大致相当于 C 语言的 const 类型限定符。尝试更改 readonly 变量的值将失败并显示错误消息。
| declare -r var1=1 echo "var1 = $var1" # var1 = 1 (( var1++ )) # x.sh: line 4: var1: readonly variable | 
| declare -i number # The script will treat subsequent occurrences of "number" as an integer. number=3 echo "Number = $number" # Number = 3 number=three echo "Number = $number" # Number = 0 # Tries to evaluate the string "three" as an integer. | 
对于声明为整数的变量,允许进行某些算术运算,而无需使用 expr 或 let。
| n=6/3 echo "n = $n" # n = 6/3 declare -i n n=6/3 echo "n = $n" # n = 2 | 
| declare -a indices | 
变量indices将被视为一个 数组。
| declare -f | 
一个declare -f在脚本中,不带参数的"declare -f" 行会导致列出该脚本中先前定义的所有 函数。
| declare -f function_name | 
一个declare -f function_name在脚本中,仅列出指定名称的函数。
| declare -x var3 | 
这声明一个变量可用于导出到脚本自身环境之外。
| declare -x var3=373 | 
declare 命令允许在设置变量属性的同一语句中为变量赋值。
示例 9-10. 使用 declare 进行变量类型声明
| #!/bin/bash
func1 ()
{
  echo This is a function.
}
declare -f        # Lists the function above.
echo
declare -i var1   # var1 is an integer.
var1=2367
echo "var1 declared as $var1"
var1=var1+1       # Integer declaration eliminates the need for 'let'.
echo "var1 incremented by 1 is $var1."
# Attempt to change variable declared as integer.
echo "Attempting to change var1 to floating point value, 2367.1."
var1=2367.1       # Results in error message, with no change to variable.
echo "var1 is still $var1"
echo
declare -r var2=13.36         # 'declare' permits setting a variable property
                              #+ and simultaneously assigning it a value.
echo "var2 declared as $var2" # Attempt to change readonly variable.
var2=13.37                    # Generates error message, and exit from script.
echo "var2 is still $var2"    # This line will not execute.
exit 0                        # Script will not exit here. | 
|  | 使用 declare 内建命令会限制变量的 作用域。 
 然而 . . . 
 | 
declare 命令有助于识别变量,无论是 环境变量 还是其他变量。这对于 数组 尤其有用。
| bash$ declare | grep HOME
HOME=/home/bozo
bash$ zzy=68
bash$ declare | grep zzy
zzy=68
bash$ Colors=([0]="purple" [1]="reddish-orange" [2]="light green")
bash$ echo ${Colors[@]}
purple reddish-orange light green
bash$ declare | grep Colors
Colors=([0]="purple" [1]="reddish-orange" [2]="light green")
	      | 
| [1] | 在此上下文中,类型声明变量意味着对其进行分类并限制其属性。例如,声明为或类型为整数的变量不再可用于字符串操作。 
 |