数组作为 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 中函数的参数:仅返回第一个元素 [重复]的主要内容,如果未能解决你的问题,请参考以下文章