1 declare与typeset
declare 和 typeset 都是 Shell 内置命令,它们的用法相同,都用来设置变量的属性。不过 typeset 已经被弃用了,建议使用 declare 代替。
declare 命令的用法如下所示:
declare [+/-] [aAfFgilprtux] [变量名=变量值]
其中,-表示设置属性,+表示取消属性,aAfFgilprtux都是具体的选项,它们的含义如下所示:
-f [name] 列出之前由用户在脚本中定义的函数名称和函数体。
-F [name] 仅列出自定义函数名称。
-g [name] 在 Shell 函数内部创建全局变量。
-p [name] 显示指定变量的属性和值。
-a [name ] 声明变量为普通数组。
-A [name] 声明变量为关联数组(支持索引下标为字符串)。
-i [name] 将变量定义为整数型。
-r [name=value] 将变量定义为只读(不可修改和删除),等价于 readonly name。
-x [name=value] 将变量设置为环境变量,等价于 export name=value。
#!/bin/bash
declare -i a c sum #将多个变量声明为整数
a=2000
b=21
sum=$a+$b
echo $sum
#将变量定义为只读变量
declare -r d=10
d=22
echo $d
2 let
let 命令和双小括号 (( )) 的用法是类似的,它们都是用来对整数进行运算,不能对小数(浮点数)或者字符串进行运算。
Shell let 命令的语法格式为:
let 表达式
或者
let "表达式"
或者
let '表达式'
和 (( )) 类似,let 命令也支持一次性计算多个表达式,并且以最后一个表达式的值作为整个 let 命令的执行结果。但是,对于多个表达式之间的分隔符,let 和 (( )) 是有区别的:
let 命令以空格来分隔多个表达式;
(( )) 以逗号,来分隔多个表达式。
对于类似let x+y这样的写法,Shell 虽然计算了 x+y 的值,但却将结果丢弃;若想获得计算的结果,可以使用let sum=x+y将 x+y 的结果保存在变量 sum 中。
#!/bin/bash
a=2000
let a+=21
echo $a
b=21
let a-=20 c=a+b #多个表达式以空格分开
echo $a $c