“Shell“数组

一.数组

1.1数组定义的方法

(30   20   10   60   50   40) //以空格相间隔的数组
  0    1    2    3    4    5   //下标

方法一:

数组名=(value0 value1 value2 …)

方法二:

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

方法三:

列表名=“value0 value1 value2 …”
数组名=(s列表名)

方法四:

数组名[O]=“value”
数组名[1]=“value”
数组名[2]=“value”

1.2示例在这里插入图片描述

(1)输出一共数组的值:
在这里插入图片描述
(2)检测数组长度:
在这里插入图片描述

字符串 作用
$(arr[@]) 或 $(arr[*]) 获取数组的所有元素的列表
$(!arr[@]) 或 $(!arr[*]) 获取数组的所有字符下标
$(#arr[@]) $(#arr[*]) 获取数组的元素个数/长度
$(arr[下标]) 获取数组的某个元素的值
unset arr[下标] 删除数组某个元素
unset arr 删除数组某个元素
${arr[@]:下标:长度} 数组切片,获取从数组的某个下标开始的多少个元素
${arr[@]/旧日字符/新字符} 数组字符替换

二.数组包

2.1数组包括的数据类型

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

(1)获取数组长度:

arr_number=(1 2 3 4 5)
arr_length=${
    
    #arr_number[*] }
​          ${
    
    #arr_number[@]}
echo  $arr_length

(2)获取数组数据列表

echo ${
    
    arr_number[*]}
echo ${
    
    arr_number[e] }

(3)获取数组下标列表

echo $( #arr_number[*] }

(4)读取某下标赋值

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

(5)数组遍历

#!/bin/bash
arr_number=(1 2 3 4 5)
for v in  $(arr_number[@]) 
do
echo   $v
done

(6)数组追加

方法一:
array_name[index]=value
在这里插入图片描述

方法二:
array_name[${#array_name[0]}]=value
在这里插入图片描述

方法三:
array_namet("$array_name[@l]n valuel … valueN)
在这里插入图片描述

双引号不能省略,否则,当数组array_name中存在包含空格的元素时会按空格将元素拆分成多个

不能将"@"替换为“ * “,如果替换为” * “,不加双引号时与”@"的表现一致,加双引号时,会将数组array_name中的所有元素作为一个元素添加到数组:
for i in “${array _namele]l” ; do echo $i; done

方法四:
array_name+=(valuelwalueN)           //待添加元素必须用”()"包围起来,并且多个元素用空格分隔
在这里插入图片描述

2.2传输数组

向函数传入数组的值:

如果将数组变量作为函数参数,函数只会取数组变量的第一个值

#!/bin/bash
test1() {
    
    
   ##函数内通过$@能获取到调用函数时后面跟的所有参数,加上()可在函数内组成新的数组
   newarr=($@) 
##对函数内组成的新数组处理后,按照元素列表格式输出,在函数题外调用函数的表达式外加上()再组成新的数组
   echo "函数内的数组的元素列表为: ${newarr[@]}"

}
###main###
##调用函数时后面跟的参数为数组的元素列表表达式
arr=(10 20 30 40 50 )
echo "函数外的数组的元素列表为: " ${
    
    arr[@]}
test1 ${
    
    arr[@]}

在这里插入图片描述

在这里插入图片描述

2.3返回数组

从函数返回数组:

#!/bin/bash
##定义函数
array() {
    
    
  ##将调用函数后的所有参数定义为newarr
   newarr=($@)
  ##下标i的范围从0开始,小于参数的个数。下标最大为数组参数个数减1
   for ((i=0;i<${
    
    #newarr[@]};i++))
   do
       newarr[$i]=$[${
    
    newarr[$i]} * 2]
      ##将原有数组的值乘2
   done
##将处理过的值进行输出
 echo ${
    
    newarr[@]}
}
 ###main###
 read -p "输入一个数组:" num
##将调用函数后输出的值定义为一个新数组arr,设置新的数组时要在数组外加上括号成为新数组
arr=($(array $num))
echo "新数组的值为${arr[@]}"

猜你喜欢

转载自blog.csdn.net/Wanghwei17/article/details/130703993