Shell 的数组定义方法

12 篇文章 1 订阅

目录

Shell数组

 数组的表达方式(四种方式)

方法一

方法二

方法三

 方法四

数组包括的数据类型

获取数组长度

 获取数据列表

读取某下标的赋值

数组遍历

数组切片

数组的替换

临时替换

 永久替换

 精确替换

数组的删除

数组追加元素(四种方法)

方法一

方法二

方法三

方法四

向函数传数组参数

从函数返回数组


Shell数组

 数组的表达方式(四种方式)

(30 20 10 60 50 40)
  0  1  2  3   4  5     #下标 从0开始 

方法一

数组名=(value0 value1 value2 value3 value4 …)

方法二


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

 下标2缺失的情况下,其他下标所对应的数值可以输出,只有下标2所对应的数值33不能输出

方法三

列表名= "value0 value1 value2..."

数组名=($列表名)

 方法四

数组名[0]="value"

数组名[1]="value" 

数组名[2]="value"

数组包括的数据类型

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

示例:

获取数组长度

格式:

arr_number=(1 2 3 4 5)

arr_length=${#arr_number[*]}

            ${#arr_number[@] }

echo $arr_length

 示例:数组的长度

 获取数据列表

echo ${arr_number[*]}

echo ${arr_number[@]}

读取某下标的赋值

arr_index2=${arr_number[2]}

echo $arr_index2

 示例:

数组遍历

#!/bin/bash

arr number=(1 2 3 4 5)

for V in ${arr_number[@]}

do

echo $v

done

示例:先定义数组,在利用for循环在数组中取值

 

数组切片

arr=(12345)

echo ${arr[@] }     #输出整个数组

echo ${arr[@]:0:2}   #获取${ 数组名[@或*]:起始位置:长度}的值

echo ${arr1[*]:1:3}

echo ${arr[@] :2:3}

示例:

数组的替换

注意:数组的替换需要谨慎使用,防止替换错误

arr=(12345)

echo ${arr[@]/4/66}#${数组名[@或*]/查找字符/替换字符}
echo ${arr[@]}   #并不会替换数组原有内容

arr=(${arr[@]/4/66})  #要实现改变原有数组,可通过重新赋值实现
echo ${arr[@] }

临时替换

 永久替换

 精确替换

数组的删除

arr=(12345)
unset arr       #删除数组
echo ${arr[*]}

arr=(12345)
unset arr [2]      #删除第三个元素
echo ${arr[*] }

示例:

 

数组追加元素(四种方法)

方法一

array_ name [ index] =value

方法二

array_ name[${ #array_ name[@]}]=value

方法三

array_ name= ("${array_ name[@]}" value1 ... valueN)
双引号不能省略,否则,当数组array_ name中存在包含空格的元素时会按空格将元素拆分成多个

不能将“g”替换为“*”, 如果替换为“*", 不加双引号时与“@”的表现一致,加双引号时,会将数组

array_ name中的所有元素作为一个元索添加到数组中

for i in "${array_ name[@]}"; do echo $i; done
当数组中存在包含空格的元素时会按空格将元素拆分成多个
[root@localhost ~]# array5=(${array4[*]})
[root@localhost ~]# echo ${array5[*]}
zhang san li si wang wu zhao liu
[root@localhost ~]# echo ${#array5[*]}
8

不能将"@"替换为"*",如果替换为"*",不加双引号时与"@"的表现一致,加双引号时,会将数组中的所有元素作为一个元素添加到数组中
[root@localhost ~]# array5=("${array4[*]}")
[root@localhost ~]# echo ${array5[*]}
zhang san li si wang wu zhao liu
[root@localhost ~]# echo ${#array5[*]}
1

正确写法:
[root@localhost ~]# array4=("zhang san" "li si" "wang wu" "zhao liu")
[root@localhost ~]# array4=("${array4[@]}" "qian qi" "zhu ba")
[root@localhost ~]# echo ${array4[*]}
zhang san li si wang wu zhao liu qian qi zhu ba
[root@localhost ~]# echo ${#array4[*]}
6

方法四

array_ name+= (value1 . . .valueN)

待添加元素必须用“()"包围起来,并且多个元素用空格分隔
[root@localhost ~]# array4+=("nan jing" "dong tai")
[root@localhost ~]# echo ${array4[*]}
zhang san li si wang wu zhao liu qian qi zhu ba nan jing dong tai
[root@localhost ~]# echo ${#array4[*]}
8

向函数传数组参数

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

格式:

test1() {
  echo "接收到的参数列表:$@"
  newarrary=($1)
  echo "新数组的值为:${newarrary[*]}"
}

######## main ########

array=(3 2 1 4 5)
echo "原始数组的值为:${array[*]} "

test1 $array
在函数外把数组传递到函数内

函数外

函数名 ${数组名[@] }

使用 ${数组名[@] } 获取数组的列表,在用这个列表作为参数给函数传递

函数内

使用 $@ 接收参数列表,在用 数组名=($@) 在函数内生成一个数组

示例:利用函数获取数组值,并算出数组中所有数的和

 

 

从函数返回数组

test3() {

     newarrary=(`echo $@`)

     sum=0

  for S in ${newarrary[*]}

  do

     sum=$[$sum + $S]

  done

       echo $sum

}

test4() {

       newarrary=(`echo $@`)

      for ((i=0; i<=$[$# - 1]; i++))

      do

          newarrary[$i]=$[${newarrary[$i]} * 2]

       done

          echo ${newarrary[*]}

      }

arr=(10 20 30 40 50)

      echo "原始数组的值为:${arr[*]}"

result1=`test3 ${arr[*]}`

        echo "新数组的和为:$result1"

示例:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值