declare -A map=()
map["var1"]=1
map["var2"]=2
map["var3"]=3
操作
获取单个元素
declare -A map=(["var1"]=1 ["var2"]=2 ["var3"]=3)
echo ${map["var1"]}
获取 map 长度
declare -A map=(["var1"]=1 ["var2"]=2 ["var3"]=3)
echo ${#map[@]}
获取 map 所有 Key
declare -A map=(["var1"]=1 ["var2"]=2 ["var3"]=3)
echo ${!map[@]}
遍历
eclare -A map=(["var1"]=1 ["var2"]=2 ["var3"]=3)
for key in ${!map[@]}
do
echo ${map[${key}]}
done
引申使用
删除子数组
当数组 B 是数组 A 的一个子集的时候,求 A 与 B 的差集
#!/bin/bash
declare -a A=(var1 var2 var3 var4)
declare -a B=(var2 var3)
for ((i=0; i<${#A[@]}; i++))
do
if echo "${B[@]}" | grep -w "${A[$i]}"&>/dev/null; then
unset A[$i]
fi
done
echo ${A[@]}
写 Bash 总是容易忘...简单总结一下 Bash 的集合主要分为两类:数组和键值对(Map)
declare 关键字
-r
表示只读 使用-r
声明的变量“只允许读,不允许写”,如果重新赋值会报错-i
表述数字-a
表示索引数组-A
表示关系型键值对(Map)-f
表示函数第一个不带参数的
declare -f
会把之前的所有函数输出 第二个单参数的declare -f f1
只会把对应的函数输出数组
下边主要介绍的是数组的声明、操作、多维数组
声明
声明的时候初始化:
或
声明但是不初始化:
操作
获取单个元素值
输出数组所有元素内容
获取数组元素个数
获取数组某个元素长度
获取数组一部分
删除数组元素
连接子数组(删除第三个元素)
模式操作符
注意: 模式操作符很危险,会把匹配到的字符串全部删除掉
遍历
关于数组的遍历
declare -a arr=(var1 var2 var3 var4 var5)
for ITEM in ${arr[@]} do echo ${ITEM} done
排序
或
关于 IFS,参考:
map
声明
初始化声明:
未初始化声明:
操作
获取单个元素
获取 map 长度
获取 map 所有 Key
遍历
引申使用
删除子数组
当数组 B 是数组 A 的一个子集的时候,求 A 与 B 的差集
循环遍历 A 数组,比较 A 的元素是否在 B 数组中。如果在则删除。