我在这里缺少什么?
我创建了一个简单的数组:
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[@]}"