foreach循环中意外标记附近的语法错误

时间:2013-11-25 13:23:58

标签: bash shell sh

我有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

1 个答案:

答案 0 :(得分:1)

从语法上讲,你的代码看起来很好。前一行可能存在一个不同的错误,它会混淆bash解析器,导致它不期望命令替换。要帮助跟踪该问题,请使用

删除命令替换
for i in "$2"/*.jar

这是在任何情况下迭代一组文件名的正确方法。你仍然会收到一个错误,但也许不同的错误会帮助你弄清楚第1--29行的实际错误是什么。


您错过了使用消息5和7的fi语句的结束if