【问题标题】:syntax error near unexpected token `((' in Sun Solaris UnixSun Solaris Unix 中的意外标记“((”)附近的语法错误
【发布时间】:2014-02-27 08:40:36
【问题描述】:

我在脚本 Setup.sh 中有以下逻辑。

#!/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 脚本中运行脚本逻辑时,它完美执行并打印以下内容。

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

谁能帮我理解为什么我在 Sun Solaris Unix 机器上出现这个错误?

【问题讨论】:

    标签: bash shell unix solaris


    【解决方案1】:

    当您运行sh Setup.sh 时,Solaris /bin/sh 用于执行脚本。 Solaris /bin/sh 不是 POSIX shell,也不理解不可移植的 (()) 语法。

    如果您使用#!/bin/bash,它应该工作。如果没有,那么您的 bash 可能非常古老。 bash --version 输出什么?

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

    【讨论】:

    • bash --version GNU bash,版本 2.03.0(1)-release (sparc-sun-solaris) 版权所有 1998 Free Software Foundation, Inc.
    • 好吧,1998 年的 2.03 非常古老,显然不支持(( ))
    • @Ravi for ((…; …; …)) 语法是在 bash 2.04 中添加的。
    • /bin/sh 是否是 POSIX 无关紧要,因为 C 风格的 for 循环不是 POSIX 规范的一部分。
    • 较新版本的 Solaris 具有较新版本的 bash,但是当您使用较旧的操作系统版本时,您会得到较旧的软件。
    【解决方案2】:

    请检查您在 Solaris 系统上使用的bash 版本。

    bash --version
    

    据我所知,(( )) 算术符号是最近引入的。而且这是一个 bashism,所以它不适用于 sh

    该网站可能使用了新版本的 bash。

    【讨论】:

    • 这里的(( ... )) 确实建立了一个算术上下文,但从技术上讲,它是C 风格for 循环语法的一部分,而不是算术命令(它不会将; 识别为有效的运算符)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 2012-10-20
    • 2012-09-29
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多