【问题标题】:How can I fix shell error "syntax error near unexpected token 'elif'"如何修复shell错误“意外令牌'elif'附近的语法错误”
【发布时间】:2010-10-01 15:00:36
【问题描述】:

我在我的 Xcode 项目中将此作为 Shell 脚本目标运行

# shell script goes here
genstrings -u -a -o en.lproj *[hmc] */*[hmc] */*/*[hmc]
if [ -f "$PROJECT_DIR/build/Release-macosx/UnicodeEscape" ] then
    build/Release-macosx/UnicodeEscape "en.lproj/Localizable.strings"
elif [ -f "$PROJECT_DIR/build/Debug-macosx/UnicodeEscape" ] then
    build/Debug-macosx/UnicodeEscape "en.lproj/Localizable.strings"
fi

exit 0

我收到此错误:

/Users/aa/Dropbox/Developer/Pandamonia LLC/iPhone/Acey Deucey/构建/Acey Deucey.build/Release/GenerateLocalizedStrings.build/Script-00F66869125625D9009F14DA.sh: 第 7 行:语法错误接近意外 令牌elif' /Users/aa/Dropbox/Developer/Pandamonia LLC/iPhone/Acey Deucey/build/Acey Deucey.build/Release/GenerateLocalizedStrings.build/Script-00F66869125625D9009F14DA.sh: line 7:elif [ -f "$PROJECT_DIR/build/Debug-macosx/UnicodeEscape" ] then' 命令 /bin/sh 失败 退出代码 2

【问题讨论】:

    标签: shell


    【解决方案1】:

    首先,不要标记它bash 和sh,你有一个shell,输入echo $SHELL 以知道你使用的是哪个shell,或者在你的脚本开头放一个shebang (#!/usr/bin/env bash)

    在您的命令后加上分号,包括[ ... ],它是test 的别名。命令终止符是换行符;、&&、|| 和&,并且是强制性的。您可以在if 和then 之间放置多个命令,因此这些分号是强制性的。

    if [ -f "$PROJECT_DIR/build/Release-macosx/UnicodeEscape" ] ; then
        build/Release-macosx/UnicodeEscape "en.lproj/Localizable.strings" ;
    elif [ -f "$PROJECT_DIR/build/Debug-macosx/UnicodeEscape" ] ; then
        build/Debug-macosx/UnicodeEscape "en.lproj/Localizable.strings" ;
    fi
    

    【讨论】:

    • 语句末尾的; 是无用的空语句。
    • @Jens:除非你不换行。
    • 我不明白你想说什么。你能改写一下吗?
    【解决方案2】:

    then 语句需要换行,或者与 ; 的 if 条件分开。

    【讨论】:

      【解决方案3】:

      您需要在关键字 then 之前使用分号。

      # shell script goes here
      genstrings -u -a -o en.lproj *[hmc] */*[hmc] */*/*[hmc]
      if [ -f "$PROJECT_DIR/build/Release-macosx/UnicodeEscape" ]; then
          build/Release-macosx/UnicodeEscape "en.lproj/Localizable.strings"
      elif [ -f "$PROJECT_DIR/build/Debug-macosx/UnicodeEscape" ]; then
          build/Debug-macosx/UnicodeEscape "en.lproj/Localizable.strings"
      fi
      
      exit 0
      

      【讨论】:

        【解决方案4】:

        对我来说,问题原来是不正确的行尾,应该是 LF 而不是 CRLF。
        发生这种情况是因为我在 Windows 中工作。

        您可以通过以下方式在 Notepad++ 中检查:

        View > Show symbol > Show all characters

        并通过以下方式修复:

        Edit > EOL Conversion > UNIX/OSX Format

        【讨论】:

          猜你喜欢
          • 2023-04-01
          • 1970-01-01
          • 2015-07-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多