我的bash数组有什么问题?

任何人都可以告诉我为什么这个bash脚本工作,如果我剪切和粘贴到terminal,但引发“server_prep.sh:7:语法错误:”(“意外”启动时使用$ sudo sh server_prep.sh?

#!/bin/sh #Packages apt-get -y install ssh libsqlite3-dev ruby-full mercurial #Gems required_gems = ( rake rails sqlite3-ruby ) #Set up directories [ ! -d /var/www ] && mkdir /var/www [ ! -d /var/www/apps ] && mkdir /var/www/apps #install gems manually if ! which gem >/dev/null; then wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz tar xvfz rubygems-1.3.5.tgz ruby rubygems-1.3.5/setup.rb ln -s /usr/bin/gem1.8 /usr/bin/gem gem update --system #Tidy Up rm -rf rubygems-1.3.5.tgz rubygems-1.3.5 fi #Install required gems for required_gem in "${required_gems[@]}" do if ! gem list | grep $required_gem >/dev/null; then gem install $required_gems fi done 

提前致谢!

你的脚本执行时使用sh而不是bash。 这两者之间可能有一些小的语法差异。

尝试更改!#/bin/sh到脚本顶部的!#/bin/bash

在sh / bash中分配variables时不能有空格。 它一定要是:

 required_gems=( rake rails sqlite3-ruby ) 

无论如何,它不一定是一个数组,你可以这样做:

 required_gems="fake rails sqlite3-ruby" 

接着

 for required_gem in ${required_gems}; do blah blah done 

注意在$ {required_gems}周围没有“”

第三行到最后一行,应该是$required_gems$required_gem