2014-02-27 39 views
0

我在劇本以下邏輯Setup.sh。語法錯誤(Unix的的Solaris

#!/bin/bash 

for ((i = 0 ; i < 5 ; i++)) 
do 
    echo "Welcome $i times." 
done 

當我使用命令./Setup.sh運行該腳本,我得到的錯誤

./Setup.sh: line 3: syntax error near unexpected token `((' 
./Setup.sh: line 3: `for ((i = 0 ; i < 5 ; i++))' 

當我運行使用命令sh Setup.sh劇本,我得到的錯誤

Setup.sh: syntax error at line 3: `(' unexpected 

當我る如果使用http://www.compileonline.com/execute_bash_online.php執行BASH Shell Script Online中的腳本邏輯,它將完美執行並打印以下內容。

Welcome 0 times. 
Welcome 1 times. 
Welcome 2 times. 
Welcome 3 times. 
Welcome 4 times. 

有人能幫我理解爲什麼我在Sun Solaris Unix機器上出現這個錯誤嗎?

回答

3

當您運行sh Setup.sh時,Solaris /bin/sh用於執行該腳本。 Solaris /bin/sh不是POSIX外殼,也不理解不可移植的(())語法。

如果您使用#!/bin/bash應該工作。如果沒有,也許你的bash是非常古老的。 bash --version輸出什麼?

在線演示使用bash 4.1.2(1)-release

+0

的bash --version GNU的bash,版本2.03.0(1)-release(Sun SPARC的-Solaris)上 版權所有1998年自由軟件基金會,公司 – Ravi

+1

好吧,2.03自1998年**是非常古老的**和顯然不支持'(())'。 – Jens

+3

@Ravi'((...; ...;))'語法被添加到bash 2.04中。 – Gilles

1

請檢查您在Solaris系統上擁有哪個版本的bash

bash --version 

據我記得,最近引入了(())算術符號。這是一種抨擊,所以它不適用於sh

該網站可能使用新版本的bash。

+0

這裏'((...))'確實建立了一個算術上下文,但在技術上它是C-style for循環語法的一部分,而不是一個算術命令(它不會將「;」識別爲有效運營商)。 – chepner