【问题标题】:syntax error near unexpected token in foreach loopforeach 循环中意外标记附近的语法错误
【发布时间】:2013-11-25 13:23:57
【问题描述】:

我有 RHEL 5.9 Bash 版本 3.2.25(1) 有以下错误堆栈跟踪:

    line 30: syntax error near unexpected token '('
    line 30: 'for i in $( ls "$2"/*.jar );

这里是sh的全部代码

if [ -z "$JAVA_HOME" ]; then
    echo "Echo Message 1"
    echo "Echo Message 2"
    exit 1
fi

if [ ! -x "$JAVA_HOME"/bin/java ]; then
    echo "Echo Message 3"
    echo "Echo Message 4"
    exit 1
fi

if [ -z "$1" ]; then
    echo Echo Message 5: OK
    exit 1

if [ ! -x "$1" ]; then
    echo Message 6: You supplied $1
    exit 1
fi

if [ -z "$2" ]; then
    echo Message 7 : OK
    exit 1

if [ ! -x "$2" ]; then
    echo Message 8: You supplied $2 
    exit 1
fi

for i in "$2"/*.jar
do
    CLASSPATH=$CLASSPATH:$i
done

_EXECJAVA = "$JAVA_HOME"/bin/java
CLASSPATH="$JAVA_HOME"/lib/tools.jar

_EXEC="$_EXECJAVA -classpath "$CLASSPATH"
com.example.test.Transaction $3"

$_EXEC

【问题讨论】:

  • 向我们展示您的完整代码,而不是拆分您的代码并针对同一个代码提出多个问题。
  • @pfnuesel,请看一下

标签: bash shell sh


【解决方案1】:

从语法上看,您的代码看起来不错。上一行可能有一个不同的错误使bash 解析器感到困惑,导致它不期望命令替换。为了帮助追踪,删除命令替换

for i in "$2"/*.jar

这是在任何情况下迭代一组文件名的正确方法。你仍然会得到一个错误,但也许不同的错误会帮助你找出真正的错误是在第 1--29 行的某个地方。


您缺少带有消息 5 和 7 的 if 语句的结束 fis。

【讨论】:

  • 第 30 行看起来不错,但第 31 行说与第 30 行相同。
  • line 31: 'do // 它可以是什么?
  • 再说一次,我不知道。真正的错误可能在前 29 行中,这会导致解析器在后面的行中失败。请将脚本的整个开头添加到您的问题中。
  • 我为每个语句添加了fi,结果是一样的
  • 你确定吗?您至少必须有不同的错误消息。我无法在这里重现它,因为它在这里运行良好而没有错误(在添加了两个缺失的“fi”之后)
猜你喜欢
  • 1970-01-01
  • 2012-08-31
  • 2012-10-20
  • 2012-09-29
  • 2013-12-11
  • 1970-01-01
  • 1970-01-01
  • 2014-09-01
相关资源
最近更新 更多