Bash变量的类型
通常理解shell变量是弱类型的,或者无类型的,其实Bash变量是有类型的。
Bash变量一共有三类:
- string
- array
- map (i.e, associative array)
- 如何定义一个string变量
直接赋值一个普通变量就是定义一共string变量。
VAR1="abc"
- 如何定义一共array变量
VAR2=("aa" "bb" "cc")
VAR2就是一个array变量。
- 如何定义一个map变量
declare -A VAR3=(["AA"]="aaa" ["BB"]="bbb" ["CC"]="ccc")
对于定义map变量必须要显式的申明(declare -A
),'-A
'表示这是一个map变量;而这个显式的申明并不需要作用给字符串变量和普通array变量(虽然显式的申明declare -a
,小写的'-a
'表示这是一个array变量),对程序的规范性和可阅读都有很好的帮助,但不是必须的,只有map才是必须显式申明。
如果不显示的申明-A
,那么Bash会把变量VAR3解释成一个普通array变量,并且只包含一个元素,即最后一个,即上述:
declare VAR3=(["AA"]="aaa" ["BB"]="bbb" ["CC"]="ccc")
==
declare VAR3=("ccc")
- 关于数字变量
定义数字变量很常见,经常用到:
declare -i VAR4=123
有同学就会问了,这不是定义一个数字变量吗,怎么说只有三种变量类型,没有数字类型呢;其实Bash内部使用的还都是字符串,只不过是数字字符串而已。
也就是只能给这个变量赋值数字字符,不能赋值字母字符, 例如
declare -i VAR4="123"
VAR4="567"
而如果强行给赋值非数字字符,那么相当于赋值了"0":
VAR4="abcd"
这个命令等同于:
VAR4="0" # or VAR4=0
- 如何查看变量的类型
命令declare -p <var>
可以打印出变量类型以及值。
declare -p VAR1
declare -p VAR2
declare -p VAR3
declare -p VAR4
输出结果如下:
declare -- VAR1="abc"
declare -a VAR2='([0]="aa" [1]="bb" [2]="cc")'
declare -A VAR3='([AA]="aaa" [BB]="bbb" [CC]="ccc" )'
declare -i VAR4="123"
字符串变量的类型declare使用--
标识。
网友评论