Arrays 数组作为Bash中函数的参数:只返回第一个元素
我发现了一个用Bash编写的脚本,可以在新的Mac上自动安装软件包和软件 这是脚本的一部分: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[@]}
# 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[@]}"