数组的定义
方式1 小括号赋值创建数组
#使用小括号赋值创建数组
fruits=(apple banana cherry)
#定义多个数组
array1=(1 2 3); array2=(a b c); array3=("foo" "bar" "baz")
方式2 键值对方式
#定义关联数组
declare -A fruit_colors
#设置键值对
fruit_colors["apple"]="red"
fruit_colors["banana"]="yellow"
fruit_colors["cherry"]="red"
#访问关联数组中的值
echo "The color of apple is ${fruit_colors["apple"]}"
echo "The color of cherry is ${fruit_colors["cherry"]}"
方式3 命令的输出结果作为数组
# 将命令的输出结果作为数组的内容
array=(`ls -l`)
方式4 read 命令读取数组元素
# 使用 read 命令从输入中读取数组元素
read -a array_name
数组的引用
${array[index]} #引用数组中索引为index的值
${array[@]} #引用所有数组元素
${array[*]} #引用所有数组元素
${#array[@]} #数组的长度
${#array[*]} #数组的长度
${#array} #数组中下标为0的字符的长度
数组的删除
#原始数组
array=("apple" "banana" "cherry" "date")
#删除索引为1的元素
unset array[1]
#打印更新后的数组
echo "更新后的数组:${array[@]}"
#删除所有元素
unset array
#打印更新后的数组,不会输出任何东西
echo "更新后的数组:${array[@]}"
数组的截取
#原始数组
array=("apple" "banana" "cherry" "date" "fig")
#从索引0开始,截取前3个元素
slice1=("${array[@]:0:3}")
#从索引2开始,截取到最后一个元素
slice2=("${array[@]:2}")
#从倒数第3个元素开始,截取到最后一个元素
slice3=("${array[@]: -3}")
打印切片后的数组
echo "切片1:${slice1[@]}" #输出:切片1:apple banana cherry
echo "切片2:${slice2[@]}" #输出:切片2:cherry date fig
echo "切片3:${slice3[@]}" #输出:切片3:cherry date fig
数组的替换
#定义数组
my_array=(111 112 113)
#// 进行全局替换,即替换数组中所有元素里的所有匹配值1,不会改变数组原本值
my_array=("${my_array[@]//1/2}")
echo ${my_array[@]//1/5} #输出:555 552 553
#替换每个元素中的第一个 匹配值,使用单个斜杠 /,不会改变数组原本值
my_array=("${my_array[@]/1/2}")
echo ${my_array[@]//1/5} #输出:511 512 513
数组的遍历
使用 for 循环遍历数组
#原始数组
fruits=("apple" "banana" "cherry")
#使用 for 循环遍历数组
for fruit in "${fruits[@]}"; do
echo "$fruit"
done
使用 while 循环遍历数组
#原始数组
fruits=("apple" "banana" "cherry")
#使用索引和while循环遍历数组
index=0
while [ $index -lt ${#fruits[@]} ]; do
echo "${fruits[index]}"
((index++))
Done