循环多语句行时完成的意外标记附近出现语法错误

循环多语句行时完成的意外标记附近出现语法错误

我有以下代码作为较大文件的一部分(假设${tools_urls}${tempFolder}是全局变量)

download_tools()
{
    for i in ${tools_urls}; do
        wget --no-check-certificate --directory-prefix=${tempFolder} ${i} || { echo "download failed" ; exit 3}
    done
}

当我运行脚本时,出现以下错误:

syntax error near unexpected token 'done'

但是,如果我删除|| { echo "download failed" ; exit 3}循环的一部分,它就会起作用。

为什么会这样呢?我看不出我的代码有什么问题,也找不到在一行中涉及多个语句的类似示例

答案1

A复合命令带花括号的每个命令后面必须有分号:

{ cmd1; cmd2; cmd3; }

所以将其更改为:

... || { echo "download failed" ; exit 3; }

请注意,最后一个命令后面需要空格:

大括号是保留字,所以它们必须与列表(命令)由空格或其他 shell 元字符组成。


另外,请注意您应该引用变量:

wget --no-check-certificate --directory-prefix="${tempFolder}" "${i}"

相关内容