在函数中显示数组 - 不起作用

在函数中显示数组 - 不起作用

我在这里缺少什么?

我创建了一个简单的数组:

declare -a appArray=(
    "item1 -a -b"
    "item2 -c -d"
    )

如果我回应这个我可以看到一切

echo ${appArray[@]}

> item1 -a -b item2 -c -d

然后我创建一个函数,如下所示:

fc_DEBUG () { 
    if [ $1 -eq 1 ] ; then 
        echo $2; 
    fi; 
};

它被设计为位于 bash 脚本中,如果我设置 DEBUG 变量,它将回显文本。因此我可以在整个脚本中使用它,而无需手动添加/删除内容。

它适用于基本数据:例如

fc_DEBUG $DEBUG "This is DEBUG text"

但是,如果我用数组调用它,我只能得到数组的一部分。

fc_DEBUG $DEBUG "${appArray[@]}"

> item1 -a -b

答案1

${appArray[@]}在运行之前被扩展fc_DEBUG。所以函数看到的第二个参数是数组的第一个参数。明确地说,这三个参数fc_DEBUG

$DEBUG "item1 -a -b" "item2 -c -d"

(将 $DEBUG 替换为应用于 $DEBUG 实际值的 split+glob 运算符所产生的单词(因为您忘记引用它))。用技术术语来说,数组是按值传递的,而不是按引用传递的。

fc_DEBUG () { 
    if [ "$1" -eq 1 ] ; then 
        shift
        echo "$@"
    fi
}

现在,使用 删除参数列表中的第一个参数shift,并打印所有参数的其余部分。

使用带引号的数组调用它:

fc_DEBUG "$DEBUG" "${appArray[@]}"

相关内容