因为在shell 里,所有的变量, 都默认是字符串类型, 如果需要操作非字符串类型的变量,则是需要对变量进行声明才可以生效. 在shell 中,可以通过declare 声明变量.
declare 声明变量
既然所有的变量的默认类型是字符串, 那么只要我们把变量声明为整数型不就可以运算了吗? 使用declare 命令就可以声明变量的类型.
declare [+/-] [选项] 变量名
选项:
-: 给变量设定类型属性
+: 取消变量的类型属性
-a: 将变量声明为数组型
-i: 将变量声明为整数型(integer)
-r: 将变量声明为只读变量. 注意,一旦设置为只读变量,既不能修改变量的值,也不能删除变量,设置不能通过+r取消只读属性
-x: 将变量声明为环境变量
-p: 显示指定变量的被声明的类型
在shell 里, - 减号是设置变量类型, + 加号反而是取消变量类型.
在shell 里,只支持 声明成 数组类型, 整数类型, 只读变量, 环境变量
将变量声明整数类型
aa=11
bb=22
declare -i cc=$aa+$bb
# 把最后的和设置成整数, shell 就知道要想加的两个变量是整数类型了.
echo $cc
# 此时就可以看到cc 是33
但是这样运算很麻烦啊, 没有办法, shell 就是这么设计的.
常用的数值运算方式(不需要声明变量类型)
我们可以使用 $ ((var1+var2)) 来进行数值运算 , 这样比较方便,这是我们常用的 数值运算 方法
将变量声明成数组类型
declare -a name[0]="shenzhen"
使用标准是这样的.但是在centos中做了优化,当变量名里带有下标的时候, 就知道是数组了, 所以是可以省略 declare 不写.
数组在shell中, 作用较少, 基本都是用来存储数据.
要使用数组里的所有数据, ${数组名[*]}, 如果只写数组名就只拿到第一个下标的
将变量声明为环境变量
我们其实也可以使用 declare 命令把变量声明为环境变量, 和 expore 命令的作用是一样的.
declare -x test=12345
# 把变量test声明为环境变量
其实 export 命令的本质也是调用 declare -x 变量名 , 只是命令太长,不好记, 一般都是使用 export
将变量声明为只读属性
注意一旦给变量设定了只读属性,那么这个变量既不能修改 变量的值, 也不能删除变量, 甚至不能用 "+r" 选项取消只读 属性.
declare -r test
显示指定变量的被声明类型
declare -p varname
如果 declare -p 不指定变量名,就会查询所有的变量的被声明类型