Arrays 数组作为Bash中函数的参数:只返回第一个元素

Arrays 数组作为Bash中函数的参数:只返回第一个元素,arrays,bash,function,shell,Arrays,Bash,Function,Shell,我发现了一个用Bash编写的脚本,可以在新的Mac上自动安装软件包和软件 这是脚本的一部分: # helpers function echo_ok() { echo -e '\033[1;32m'"$1"'\033[0m'; } PACKAGES=( vim zsh tree git ) echo_ok "Installing packages..." brew install "${PACKAGES[@]}

我发现了一个用Bash编写的脚本,可以在新的Mac上自动安装软件包和软件

这是脚本的一部分:

# helpers
function echo_ok() { echo -e '\033[1;32m'"$1"'\033[0m'; }

PACKAGES=(
    vim
    zsh
    tree
    git
)

echo_ok "Installing packages..." 
brew install "${PACKAGES[@]}"
脚本将正确安装阵列中列出的所有软件包

出于测试目的,我修改了该行

brew install "${PACKAGES[@]}"
进入

作为输出,我只得到数组的第一项(
vim

然而,如果我使用

echo "${PACKAGES[@]}"
我得到了数组的所有元素

看起来问题是在helper函数中传递数组。 如果我没有弄错的话,
'\033[1;32m'
'\033[0m';
与文本的颜色有关,
“$1”
是传递给该帮助函数的参数。双引号重要吗?因为我在
“${PACKAGES[@]}”
周围也看到双引号


我真的不知道我做错了什么,也不知道为什么当与
brew安装“${PACKAGES[@]}”一起使用时,我不能获得阵列的全部内容
将您的函数更改为此,即
printf
而不是
echo-e
,并使用
“$@”
而不是
“$1”
,如下所示:

echo_ok(){
printf'\033[1;3200万%s\033[0m\n'$@“
}

“$1”
echo\u ok()中应该是
“$@”
@Inian:这不是唯一的问题,因为
echo-e
with
$@
不会用换行符打印每个元素。我看不出OP想要在新行上打印它。他们似乎正在测试
brew安装
的参数,在这种情况下,参数需要在同一行上
echo "${PACKAGES[@]}"