我的 bash 数组有什么问题?

我的 bash 数组有什么问题?

有人能告诉我为什么如果我将这个 bash 脚本剪切并粘贴到终端,它就能工作,但是当使用 $ sudo sh server_prep.sh 启动时,却会抛出“server_prep.sh: 7: 语法错误: “(” 意外”?

#!/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

提前致谢!

答案1

执行脚本时,使用的是 sh,而不是 bash。两者之间可能存在细微的语法差异。

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

答案2

在 sh/bash 中分配变量时不能有空格。必须是:

required_gems=( rake rails sqlite3-ruby )

无论如何,它不一定是一个数组,您只需执行以下操作即可:

required_gems="fake rails sqlite3-ruby"

进而

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

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

答案3

倒数第三行应该$required_gems$required_gem

相关内容