linux 数组学习
变量:
存储单个元素的内存空间
数组:
存储多个元素的连续的内存空间,相当于多个变量的集合
数组名和索引
索引:编号从0开始,属于数值索引
注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash4.0版本之后开始支持(关联数据使用时必须提前声明类型)
bash的数组支持稀疏格式(索引不连续)
声明数组:
declare -a ARRAY_NAME
declare -A ARRAY_NAME: 关联数组
注意:普通数组不用事先声明就可以使用,但关联数组必须提前声明才能使用,且两者不可相互转换。
示例:
#!/bin/sh
# 这里注意声明数组,不然自定义下标的数组遍历不到结果
declare -A array_test
# 自定义数组下标
array_test=(["a"]="aa" ["b"]="bb" ["c"]=cc)
# [@] 和 [*] 一样,获取所有参数值
arrayList=${array_test[@]}
echo $arrayList
for i in $arrayList
do
echo $i
echo "+++++++++++++++"
done
# 自定义下标之后就可以通过自定下标找到对应的值
index="a"
arrayA=${array_test["$index"]}
echo "============="
echo $arrayA
echo "============="
# 获取数组长度
echo ${#array_test[@]}
# 默认下标(0,1,2)
array_B=(name age addr)
# 通过下标定义
array_B[4]="shanghai"
arryBList=${array_B[@]}
for i in $arryBList
do
echo "-------------"
echo $i
echo "-------------"
done
# 使用下标获取对应的值,也可以使用 -1 反向取值
echo "##############"
echo ${array_B[0]}
echo "##############"
echo ${array_B[-1]}
echo "##############"
# 通过命令定义数组内容
array_C=(`ls /root/shell`)
arrayCList=${array_C[*]}
for c in $arrayCList
do
echo $c
echo "------------------"
done
# 修改数组内容
array_B[4]="beijing"
echo "array_B[4]: "${array_B[4]}
# 删除数据
unset array_B[1]
echo "array_B_ALL: "${array_B[*]}
unset array_test[a]
echo "array_test_all: "${array_test[*]}
示例结果:
aa bb cc
aa
+++++++++++++++
bb
+++++++++++++++
cc
+++++++++++++++
=============
aa
=============
3
-------------
name
-------------
-------------
age
-------------
-------------
addr
-------------
-------------
shanghai
-------------
##############
name
##############
shanghai
##############
aa.sh
------------------
demo.sh
------------------
getopt.sh
------------------
map.sh
------------------
array_B[4]: beijing
array_B_ALL: name addr beijing
array_test_all: bb cc