数组是怎样炼成的

数组

定义

  • 数组是一列数的集合,我们使用索引来区分它
  • 索引是从0开始的,0 1 2 3 4 …

数组定义方法

方法一

  • 数组名=(value0 value1 value2 …)

在这里插入图片描述

方法二

  • 数组名=([0]=value [1]=value [2]=value …)

在这里插入图片描述

方法三

  • 列表名=“value0 value1 value2 …”
  • 数组名=($列表名)
    在这里插入图片描述
    在这里插入图片描述

方法四

  • 数组名[0]=“value”
  • 数组名[1]=“value”
  • 数组名[2]=“value”
    在这里插入图片描述

数组内容的查看

使用echo来查看

echo ${a[*]}

在这里插入图片描述

数组包含的数据类型

  • 数值类型
  • 字符类型
    使用" "或’ '定义

获取数组长度

a=(1 2 3 4 5)
a_long=$(#a[*]) #将获取长度赋值给某个变量,这样平时使用更加方便
echo $a_long

在这里插入图片描述

获取某下标赋值

arr_index2=${arr[2]}
echo $arr_index2  

在这里插入图片描述

数组遍历

#!/bin/bash
a=(1 2 3 4 5)
for v in $ {a [e]}
do
echo $v
done

在这里插入图片描述

在这里插入图片描述

数组切片

arr=(1 2 3 4 5)
echo ${arr[@] }  #输出整个数组
echo $ {arr[@] :0:2}   获取${数组名〔@或*]:起始位置:长度}的值
echo ${arr1[ * ] :1 :3}
echo ${arr[0]:2:3}

在这里插入图片描述

数组替换

arr=(1 2 3 4 5)
echo $ {arr[@]/4/66} #$ {数组名[@或*]/查找字符/替换字符}
echo $ {arr[@]} #并不会替换数组原有内容
arr=($ {arr[@]/4/66}) #要实现改变原有数组,可通过重新赋值实现
echo $ {arr[@]}
在这里插入图片描述

数组删除

arr=(1 2 3 4 5)
unset arr     #删除数组
echo ${arr[* ]}
arr= (1 2 3 4 5)
unset arr[2]     #删除第三个元素
echo $ {arr[* ]}

在这里插入图片描述
在这里插入图片描述

数组增加新的数

方法一:
array _name [ index]=value
方法二:
array _name [${#array_name [@] } ]=value
方法三:
array_name=("$ {array name [ 0] } " value1 ... valueN)
双引号不能省略,否则,当数组array name中存在包含空格的元素时会按空格将元素拆分成多个
不能将"@"替换为"*",如果替换为",不加双引号时与"e"的表现一致,加双引号时,会将数组array_name中的所有元素作为一个元素加到数组中
方法四:
array name+= (value1 ... valueN)
待添加元素必须用"()“包围起来,并且多个元素用空格分隔

这里个人呢建议使用第四种,方便快捷,bug还少

在这里插入图片描述

向函数传数组参数

test() {
   echo "接收到的参数列表:$@"
   newa=$1
   echo "新数组的值为:${newa[*]}"
   }
   
a=(3 2 1 4 5)
echo "原始数组的值为:${a[*]}"
test1 $a

在这里插入图片描述
在这里插入图片描述

  • 我们发现如果我们将变量作为函数参数,函数只会取数组变量的第一个值。这个时候如果需要解决掉这个问题,我们则需要将数组的值分解成单个的值,然后将这些值作为函数的数组变量。

在这里插入图片描述

从函数返回数组

test2(){
    newa=(`echo $@`)
 sum=0
 for value in ${newa[*]}
 do
    sum=$[$sum + $value]
 done
 echo $sum
}

test3() {
   newa=(`echo $@`)
   for ((i=0;i<=$[$# - 1];i++))
   {
     newa[$i]=$[${newa[$i]} * 2]
   }
   echo ${newa[*]}
   }


a=(3 2 1 4 5)
echo "原始数组的值为:${a[*]}"
resultl=`test2 ${a[*]}`
echo "原始数组的和为:$resultl"
result2=(`test3 ${a[*]}`)
echo "新数组的值为:${result2[*]}"

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_51614581/article/details/111571466