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] | 在此上下文中,类型声明变量意味着对其进行分类并限制其属性。例如,声明为或类型为整数的变量不再可用于字符串操作。
|