shell 數組與函數之間的傳參


數組與函數之間的傳參



一: 向函數傳數組的參數

#!/bin/bash

test1 () {
    echo "函數接收到的參數列表為: $@"   #這里是函數位置變量$@

    #將接受到的參數,定義成一個新的數組
    newarr=($@)         #位置參數,如果使用$1,只會取第一個值
    echo "新的數組的值為: ${newarr[@]}"
}

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

arr=(10 20 30 40 50)

echo "原始數組的值為: ${arr[@]}"

#調用函數,將數組的元素作為函數的位置變量
test1  ${arr[@]}     #如果直接使用 $arr 作為位置變量,則只會將數組的第一個元素傳遞過去 

image-20210721114210647

二:從函數返回數組

獲取數組的累加值

並將原始數組的值乘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[@]}"

image-20210721122017916


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM