我正在尝试做这样的事情:
function install {
cmd=$1
shift
for pkg in "$@";
do
if $cmd $pkg; then
echo "Installed $pkg"
else
echo "Failed to install $pkg"
fi
done
}
brews=(git node scala sbt zsh caskroom/cask/brew-cask)
casks=(dropbox google-chrome spotify)
install 'brew install' $brews
install 'brew cask install' $casks
但是,这仅适用于每个阵列的第一个元素。为什么不拿起其余的数组元素?
答案 0 :(得分:0)
替换:
install 'brew install' $brews
install 'brew cask install' $casks
使用:
install 'brew install' "${brews[@]}"
install 'brew cask install' "${casks[@]}"
要理解原因,请遵守:
$ brews=(git node scala sbt zsh caskroom/cask/brew-cask)
$ echo $brews
git
$ echo "${brews[@]}"
git node scala sbt zsh caskroom/cask/brew-cask
如您所见,在bash
下,$brews
仅引用数组的第一个元素。相比之下,"${brews[@]}"
将扩展到数组的所有成员,每个成员都有一个单独的单词。
替换:
if $cmd $2; then
使用:
if $cmd "$pkg"; then
同样在echo语句中替换对$2
到$pkg
的引用。
当你在它时,以防任何参数包含空格,替换:
for pkg in $@;
使用
for pkg in "$@";