数组定义
#数值数组
arr_number=(1 2 3 4 5);
#字符串数组
arr_string=("abc" "edf" "ghi");
arr_string=('abc' 'edf' 'ghi');
arr_string=(abc edf ghi);
#返回值转换为数组
arr_return=$(ls /) #ls命令返回值转数组
arr_return=(`cat $file`) #cat读取文件返回值转数组
#更改分割符,通过变列环境变量IFS,注意临时变更需要及时恢复
OLD_IFS=$IFS # 备份之前的分隔符环境变量
IFS=";" # 指定分隔符为 ;
STR_LIST=(abc;edf;ghi) # 将字符串以 ; 分割成数组
IFS=$OLD_IFS # 恢复分隔符环境变量
数组操作
#取得数组的长度
arr_length=${#arr_number[*]}
arr_length=${#arr_number[@]}
#取得数组的有效索引值:${!数组名[@或*]}
echo ${!arr_number[@]} # 0 1 2 3 4
#元素访问
#下标访问
echo ${arr_number[0]} # 1
echo ${arr_string[1]} #edf
#访问全部
echo ${arr_number[*]} # 1 2 3 4 5
echo ${arr_number[@]} # 1 2 3 4 5
#元素修改
arr_number[1]=98 #注意此处赋值语句没有$
echo ${arr_number[*]} # 1 98 3 4 5
#元素添加
arr_number[9]=98 #索引号超出数组长度即可
arr_number[${#arr_number[*]}]=98 #添加至末尾,索引号连续
echo ${arr_number[*]} # 1 2 3 4 5 98
array=("${arr_number[@]}" 98) #此方法只能赋值给新变量
echo ${array} # 1 2 3 4 5 98
#元素删除
unset arr_number[1] #删除下标为1(第二个)元素
unset arr_number #删除整个数组
#分片访问:${数组名[@或*]:开始下标:长度}
echo ${arr_number[@]:1:4} # 2 3 4 5
#模式替换:${数组名[@或*]/模式/新值}
echo ${arr_number[@]/2/98} # 1 98 3 4 5
echo ${arr_string[@]/e*/98} # abc 98 ghi
#遍历方法一:值
for v in ${arr_number[@]}; do
echo $v;
done
#遍历方法二:下标
for i in ${#arr_number[@]}; do
echo $i ${arr_number[$i]};
done
#连接两个数组(注意双引号的使用避免字符串中存在空格引起的问题)
array=("${arr_number[@]}" "${arr_string[@]}")
echo ${array[@]} # 1 2 3 4 5 abc edf ghi
#复制一个数组(原理同上)
array=("${arr_number[@]}")
数组操作检索与判断
#数组中是否包含某个字符串
#方法一,通过遍列数组,使用 元素=~字符串判断
for item in ${item_arry[@]};
do
if [ "${item}" =~ "abc" ]; then
echo "abc is in array."
fi
done
#方法二,echo ${array[*]}|grep -wq 字符串 判断
echo "${array[@]}" | grep -wq "abc" && echo "yes" || echo "no"
#数组中是否包含某个元素
#方法一,通过遍列数组,一一去比较
for item in ${item_arry[@]};
do
if [ "${item}" == "abc" ]; then
echo "abc is in array."
fi
done
#方法二,通过元素替换操作,比较前后是不相等来判断
[[ ${array[@]/abc/} != ${array[@]} ]] && echo "Yes" || echo "No"
#找出数组中的重复元素
echo "${array[*]}"|tr ' ' '\n'|sort|uniq -d
#找出两个数组中重复的元素(并集)
echo "${array1[*] $array2[*]"|tr ' ' '\n'|sort|uniq -d
#找出两个数组中非重复的元素(差集)
echo "${array1[*] $array2[*]"|tr ' ' '\n'|sort|uniq -u