Shell脚本数组详解

本文详细介绍了Shell脚本中数组的各种操作,包括定义、获取长度、遍历、切片和替换方法。还讨论了如何向函数传递和从函数返回数组参数,提供了实用的示例代码。

数组的定义方式

数组中的元素:(30 20 10 60 50 40)
数组中的索引: 0 1 2 3 4 5

方法一

数组名=(value0 value1 value2 …)

方法二

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

方法三

列表名=“value0 value1 value2 …”

方法四

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

数组包括的数据类型

1.数值类型
2.字符类型
使用""或’ '定义

获取数组的长度

arr_number=(1 2 3 4 5)

取得数组元素的个数

length=${#array_name[@]}

或者
length=${#array_name[*]}

取得数组单个元素的长度
length=${#array_name[n]}

数组的遍历

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

数组的切片

arr=(1 2 3 4 5)

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

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

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

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

数组的替换

arr=(1 2 3 4 5)

echo ${arr[@]/4/66}
echo ${arr[@]}

arr=(${arr[@]/4/66})
echo ${arr[@]}

方法一

array_name[index]=value

方法二

array_name[${#array_name[@]}]=value

方法三

array_name=("${array_name[@]}" value … valueN)
双引号不可省略,否则当数组array_name中存在包含空格的元素时会按照空格将元素拆分为多个

不能将"@"替换为”*“,如果替换为 " * “,不加双引号时与”@"的表现一致,加双引号时,会将数组array_name中的所有元素作为一个元素添加到数组中

for i in “${array_name[@]}”; do echo $i; done

方法四

array_name+=(value1 … valueN)
待添加元素必须用"()"包围起来,并且多个元素用空格分离

向函数传数组参数

如果将数组变量作为函数参数,函数只会取数组变量的第一个值
test1() {
echo “接收到的参数列表:$@”
newarray=($1)
echo “新数组的值为:” ${newarray[*]}
}

array={3 2 1 4 5}
echo “原始数组的值为:${array[*]}”
test1 $array

解决这个问题则需要将数组变量的值分解成单个的值,然后这些值作为函数参数使用。在函数内部,再将所有的参数重新合成一个新的数组变量。
test2() {
newarray=($(echo $@))
echo “新数组的值为:” ${newarry[*]}"
}

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

从函数中返回数组

test2() {
    newarray=(`echo $@`)
    
    sum=0
    for value in ${newarray[*]}
    do
    	sum=$[$sum + $value]
     for value in ${newarray[*]}
     do
     	sum=$[$sum + $value]
     done
     echo $sum
}
test3() {
   newarray=(`echo $@`)
   for ((i=0; i<=$[$#-1]; i++))
{
   newarray[$i]=$[${newarray[$i]} * 2]
}
   echo ${newarray[*]}
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值