数组作为 Bash 中函数的参数:仅返回第一个元素 [重复]

Posted

技术标签:

【中文标题】数组作为 Bash 中函数的参数:仅返回第一个元素 [重复]【英文标题】:Array as argument of a function in Bash: only first element get returned [duplicate] 【发布时间】:2021-03-29 05:22:49 【问题描述】:

我发现了一个用 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[@]"

进入

echo_ok "$PACKAGES[@]"

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

但是,如果我使用

echo "$PACKAGES[@]"

我得到了数组的所有元素。

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

我不确定自己做错了什么,以及为什么我没有像使用 brew install "$PACKAGES[@]" 那样获得数组的全部内容。

【问题讨论】:

"$1"echo_ok() 中应该是"$@" @Inian:这不是唯一的问题,因为 echo -e$@ 不会用换行符打印每个元素 我不认为 OP 打算在新行上打印它。他们似乎正在测试brew install 的参数,在这种情况下,参数需要在同一行 【参考方案1】:

将您的函数更改为此,即printf 而不是echo -e,并使用"$@" 而不是"$1",如下所示:

echo_ok() 
   printf '\033[1;32m%s\033[0m\n' "$@"

【讨论】:

以上是关于数组作为 Bash 中函数的参数:仅返回第一个元素 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

C语言中有没有返回数组类型的函数?

bash中通过关联数组的foreach循环仅返回最后一个元素

带有数组的函数不起作用

Array对象

数组reduce方法以及高级技巧

JavaScript算法练习:Slasher Flick