数组的定义方式
数组中的元素:(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"
本文详细介绍了Shell脚本中数组的各种操作,包括定义、获取长度、遍历、切片和替换方法。还讨论了如何向函数传递和从函数返回数组参数,提供了实用的示例代码。
33万+

被折叠的 条评论
为什么被折叠?



