shell
中的变量默认是字符串类型的,且是弱类型的。declare
declare
命令declare
用来声明变量类型。
declare [+/-] [选项] 变量名
选项 | 含义 |
---|---|
- | 给变量设定类型属性 |
+ | 取消变量的类型声明 |
-a | 表示将变量声明为数组类型 |
-l | 表示将变量声明为整数类型 |
-i | 表示将变量声明为整数类型 |
-x | 表示将变量声明为环境变量(相当于export [变量名]=[变量值]) |
-r | 表示将变量声明为只读类型 |
-p | 显示变量的类型标示 |
a=1
b=2
c=$a+$b
echo $c # 1+2
declare -i c=$a+$b # 表示声明整形变量
echo $c # 3
declare +i c # 取消c变量的类型声明
c=$a+$b
echo $c # 1+2
declare -i $d=1
declare -p $c # declare -i $c="3"
# 声明环境变量
declare -x $e=6
set | grep e=10 # e=10
env | grep e=10 # e=10
declare -r x=10
x=11 # bash:x is readonly
复制代码
declare -a [变量名]
可以声明一个数组类型的变量。delcare -a names # 声明一个数组变量names
names[0]=wang
names[1]=haoyu
复制代码
当调用echo [数组类型]
的时候默认只打印数组中的第一个:
需要额外注意的时候,调用数组类型的时候需要使用
${数组}
进行访问。因为数组类型表示是一个可计算的整体。
echo ${names} # wang
echo ${names[1]} # haoyu
复制代码
如果使用echo names[1]代表的意思就不同了,就是打印names这个变量然后再拼接上[1]字符串,就是haoyu[1]。需要使用
*
通配符打印数组中所有的内容。echo ${names[*]} # wang haoyu
通过declare -x xx=6
可以声明一个环境变量xx
的值为6
。
它与export xx=6
是相同的效果都是声明环境变量语句,export
内部实际调用的就是declare -x
语句,语法糖而已。
通过declare -r [变量]
可以声明一个只读的变量。
通过declare -p [变量]
可以查看变量的类型属性。
declare
声明的变量指定类型,就可以进行数值的运算了。expr
以及let
通过expr
和let
关键字可以进行变量类型的计算。
num1=1
num2=2
sum=$(expr $num1 + $num2) # 注意+运算符左右两边必须有空格
echo $sum # 3
复制代码
sum2=$(($num1 + $num2))
echo sum2 # 3 和上边是等价的
复制代码
sum3=$[$num1 + $num2]
echo sum3 # 3 和上边也是等价的
复制代码