數組與函數之間的傳參
一: 向函數傳數組的參數
#!/bin/bash
test1 () {
echo "函數接收到的參數列表為: $@" #這里是函數位置變量$@
#將接受到的參數,定義成一個新的數組
newarr=($@) #位置參數,如果使用$1,只會取第一個值
echo "新的數組的值為: ${newarr[@]}"
}
################### main ########################
arr=(10 20 30 40 50)
echo "原始數組的值為: ${arr[@]}"
#調用函數,將數組的元素作為函數的位置變量
test1 ${arr[@]} #如果直接使用 $arr 作為位置變量,則只會將數組的第一個元素傳遞過去
二:從函數返回數組
獲取數組的累加值
並將原始數組的值乘2 ,作為新的數組值
#!/bin/bash
test2() {
local newarr=($@) #將接受到數組列表定義為一個新的數組 $@ 為函數的位置變量
local sum=0
for i in ${newarr[@]}
do
sum=$[$sum + $i] # 求和
done
echo "$sum" #將累加的和返回
}
test3() {
#將獲取到的參數定義成一個新的數組
local newarr=($@)
#獲取新數組的長度
local length=${#newarr[@]}
for ((i=0; $i<$length;i++)) #for循環遍歷數組。0 為數組的起始下標,數組的最后一個下標為長度減1,所有用 小於號"<" ,不用小於等於.
do
newarr[$i]=$[${newarr[$i]} * 2] #將每個元素值都 *2 ,並替換原來的
done
echo ${newarr[@]} #返回新數組元素組成的列表
}
############################## main ###################################
arr=(10 20 30 40)
echo "原始數組為: ${arr[@]}"
#調用函數test2,將數組arr的元素列表作為參數傳遞進函數. 將函數的返回結果作為變量result1的值
result1=$(test2 ${arr[@]})
echo "數組所有元素的累加值為 $result1"
#調用函數test3,將數組arr的元素列表作為參數傳遞進函數.將函數的返回結果定義為新的數組result2
result2=(`test3 ${arr[@]}`)
echo "原數組值乘2后,新的數組為: ${result2[@]}"