我有以下代码作为较大文件的一部分(假设${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}"