大きなファイルの一部として、次のコードがあります(グローバル変数と見なされます)${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行に複数のステートメントを含む同様の例が見つかりませんでした。
答え1
ㅏ複合コマンド中かっこ付きの各コマンドの後にはセミコロンが続く必要があります。
{ cmd1; cmd2; cmd3; }
したがって、次のように変更してください。
... || { echo "download failed" ; exit 3; }
最後のコマンドの後にはスペースが必要です。
中かっこは次のとおりです。予約語したがって、次のように一致する必要があります。リスト(コマンド)は、スペースやその他のシェルメタ文字で構成されます。
また、変数を引用する必要があります。
wget --no-check-certificate --directory-prefix="${tempFolder}" "${i}"