将数组作为函数参数传递给bash时出错

时间:2015-09-21 07:56:33

标签: bash

这是我正在处理的代码:

function execute {
    task="$1"
    servername="$2"
    "$task" "${servername[@]}" 

}


function someOtherThing {

    val=$1
    echo "$val"

}


function makeNecessaryDirectory {

    arr=("$@")
    echo "${arr[@]}"

}


dem=(1 2 3 4 5)


execute someOtherThing 1
execute makeNecessaryDirectory "${dem[@]}"

输出:

1
1

预期产出:

1
1 2 3 4 5

如何实现这一目标?我在逻辑上没有发现任何错误。

Side question

总是在execute内作为数组接收第二个参数是否安全,以便它可以处理两个相关函数,或者我应该在execute内进行显式检查?

1 个答案:

答案 0 :(得分:1)

正如我的评论所述

您将数组作为单个args传递给execute,然后只传递第一个makeNecessaryDirectory,因此$@只是传递的单个参数,即1。

我会这样做,我已经对我已经改变的部分添加了评论。 这只是微小的变化,但希望能为你效劳。

#!/bin/bash

function execute {
    task="$1"
    servername="$2"
    "$task" "$servername"
    #No longer pass array here just pass servername as the name of array

}


function someOtherThing {

    val=$1
    echo "$val"

}


function makeNecessaryDirectory {

    local arr=("${!1}") 
    #Indirect reference to the first arg passed to function which is now the
    #name of the array

    for i in "${arr[@]}";
       do
           echo "$i"
       done

}


dem=(1 2 3 4 5)


execute someOtherThing 1
execute makeNecessaryDirectory 'dem[@]' #Pass the array name instead of it's contents